Bergantung pada keahlian postgres dan / atau sql Anda, Anda memiliki beberapa opsi:
menganalisis kueri melalui perintah EXPLAIN untuk mencari tahu apakah Anda menekan hambatan tertentu. Peringatan: kadang-kadang output EXPLAIN mungkin sulit dipahami
jika Anda berharap bahwa sebagian besar atau sebagian besar geometri dalam tabel1 JANGAN memotong berpoligon, Anda bisa mencoba menerapkan kondisi pendahuluan terhadap poligon yang lebih sederhana (yaitu dengan memecah multiploygon dalam potongan yang lebih kecil) dan kemudian jalankan persimpangan multipoligon yang lebih berat hanya pada hasil tersebut. Lihat di bawah untuk contoh.
jika dan hanya jika CPU adalah hambatan (yaitu server macet di persimpangan komputer) Saya sepenuhnya menyarankan Anda mendapatkan CPU yang lebih besar, lebih cepat, lebih kuat atau menyewa Instance CPU Tinggi satu kali dari EC2 Amazon dan menghancurkannya ketika Anda selesai
Contoh permintaan untuk item 2:
SELECT DISTINCT ON (st1.userid) st1.userid ,ST_AsText(st1.position), st1.timestamp
FROM (
select userid, position, timestamp from table1
WHERE ST_Intersects ( YOUR_MULTIPOL_BOUNDS_HERE,position)
) as st1
WHERE ST_Intersects ( ST_GeomFromText('a multiypolygon geom goes here',4326),st1.position)
ORDER BY st1.userid, st1.timestamp desc
Untuk meningkatkan kinerja, Anda juga dapat secara sementara mematerialisasi subselect st1 sebagai tabel sehingga Anda dapat mengindeksnya.
@Nicklas benar untuk menunjukkan dalam komentar bahwa contoh untuk saran 2 seharusnya tidak membantu. Dia benar, tapi saya pikir saya juga (sebagian) benar.
Bahkan sepertinya pertanyaan yang sangat mirip ditanyakan (dan dijawab) pada November lalu di postgis ML:
http://postgis.refractions.net/pipermail/postgis-users/2011-November/031344.html
dan ternyata sarannya adalah untuk benar-benar memecah poligon sehingga indeks paling efektif dapat memfilter persimpangan palsu yang akan dipicu oleh pemeriksaan batas sederhana.