2
PostGIS断続的なINDEXパフォーマンス
約5500万のデータポイント(ポイントはSRID 4326のジオメトリ)を含むテーブルがあり、クエリのために、これを大きなポリゴンからさまざまな範囲のさまざまな( 2000 km四方)からかなり小さい(小さいのは約100 km四方)。 ユーザーが選択した最初のクエリは、最初の5500万ポイントを、ユーザーが選択した日付範囲などに応じて約30万ポイントに絞り込みます。次に、結合が行われ、クエリが完了すると、使用するために選択したエリアセットに応じて、通常は最大150,000に絞り込まれます。 私が抱えている問題は、クエリがときどき停止するだけで、予想される〜25秒ではなく、最大〜18分かかる場合があることです。この時点で、通常、VACUUM ANALYZEを実行し、いくつかのクエリを実行してから、再び動作を開始する必要があります。この時点では、データまたはエリアテーブルのデータは追加、更新、または削除されていません。 私は考えることができるすべてのものをいじってみましたが、これはまだそれも不変で起こっているようです。data.point列とarea.polygon列の両方にGIST INDEXESがあります。 data.point列からINDEXを削除すると、状況が少し安定したように見えましたが、通常は35秒程度遅くなっています。しかし、INDEXを削除することは、妨げにならないようにするのに役立たないので、非常に悪い選択のようです。 PostGIS 1.5でPostgreSQL 9.1.4を使用しています これが私が実行しているクエリです select * FROM data, area WHERE st_intersects (data.point, area.polygon) AND (readingdatetime BETWEEN '1948-01-01' AND '2012-11-19') AND datasetid IN(3) AND "polysetID" = 1 AND area.id IN(28,29,30,31,32,33,25,26,27,18,19,20,21,12,13,14,15,16,17,34,35,1,2,3,4,5,6,22,23,24,7,8,9,10,11) 説明する Nested Loop (cost=312.28..336.59 rows=5 width=2246) (actual time=1445.973..11557.824 rows=12723 loops=1) …