Postgresql

PostGIS 視窗功能沒有獲取索引?

  • September 28, 2021

我正在使用 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 手冊中的空間索引:

引用自:https://dba.stackexchange.com/questions/171457