Postgres ve / veya sql uzmanlığınıza bağlı olarak birkaç seçeneğiniz vardır:
belirli bir darboğazda vurup vurmadığınızı öğrenmek için EXPLAIN komutuyla sorguyu analiz edin . Uyarı: bazen EXPLAIN çıktısının anlaşılması zor olabilir
Eğer emin çoğu veya tablo1 de geometrilerin önemli bir bölümünü bekliyorsanız DEĞİL MultiPolygon kesiştiği sen (küçük parçalar halinde multiploygon kırarak yani) daha basit bir poligon karşı bir ön koşul uygulamak deneyin ve sonra yalnızca üzerinde ağır MultiPolygon kavşak çalıştırabilir bu sonuçlar. Örnek için aşağıya bakın.
eğer ve CPU darboğaz yalnızca ben (yani sunucu sıkışmış işlem kavĢaklardır) dully Eğer daha büyük, daha hızlı, daha güçlü CPU almak önermek veya Amazon'un EC2 kapalı bir kerelik Yüksek CPU Örneği kira ve olduğunuzda onu yok tamam
2. madde için örnek sorgu:
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
Performansı artırmak için alt seçimi st1'i geçici olarak bir tablo olarak gerçekleştirebilirsiniz, böylece dizine ekleyebilirsiniz.
@Nicklas, yorumlarda 2. öneri örneğinin yardımcı olmaması gerektiğini belirtmek için haklıdır. Haklı, ama sanırım ben de (kısmen) haklıyım.
Aslında, geçen Kasım postgis ML'de çok benzer bir soru soruldu (ve cevaplandı):
http://postgis.refractions.net/pipermail/postgis-users/2011-November/031344.html
ve öneri, çokgenin aslında kırılmasıdır, böylece indeks, basit bir sınır kontrolü tarafından tetiklenecek yanlış kavşakları en etkili şekilde filtreleyebilir.