Postgresql
PostGIS 視窗功能沒有獲取索引?
我正在使用 PostGIS 擴展和 PostgreSQL執行此查詢ST_ClusterDBSCAN 。我已為 point_data 編制索引,但
EXPLAIN ANALYZE
向我顯示該索引未被拾取。我怎樣才能重新排列我的查詢,以便它確實被拾起?指數:
CREATE INDEX index_point_data ON point_data USING GiST(geom)
詢問:
SELECT id, ST_ClusterDBSCAN(geom, eps := 350, minPoints := 3) OVER () AS cluster_id, geom FROM point_data
計劃:
WindowAgg (cost=0.00..148.64 rows=3984 width=44) (actual time=195.029..197.227 rows=3984 loops=1) -> Seq Scan on point_data (cost=0.00..98.84 rows=3984 width=40) (actual time=0.022..0.578 rows=3984 loops=1) Planning time: 0.136 ms Execution time: 197.593 ms
讀取整個表的查詢不會從索引中受益。按順序讀取整個表更便宜。
您顯示的空間 GiST 索引可用於從表中過濾一小部分的其他類型的查詢,例如:
SELECT * FROM point_data WHERE ST_DWithin($input_geometry, geom, 5000);
理解 Postgres 查詢計劃器的決定需要對 Postgres 有深入的了解。首先閱讀手冊的這一章,然後點擊那裡的連結:
更具體地說,關於 PostGIS 手冊中的空間索引: