【发布时间】:2020-10-02 10:46:07
【问题描述】:
我在具有 postgis 扩展名的 postgresql 12 中有一个点数数据库(1000 万)。我在点列上创建了一个要点索引,我需要根据与给定点的距离过滤点。似乎没有使用索引。我运行以下解释:
EXPLAIN
SELECT actual_location
FROM geometries
WHERE ST_DWithin(ST_SetSRID(ST_MakePoint(30,30), 4326), actual_location, 100000, true);
所以它似乎只进行并行序列扫描。我这里有什么问题吗?我应该使用不同的索引类型吗?当数据库填充 100 万个点时,它会在大约 1.3 秒内返回结果。 1000 万到 11-13 左右,对于我的应用程序的用户来说,等待这么长时间是不可接受的。
【问题讨论】:
-
看起来您正在使用地理版本的 st_dwithin,因此它会将您的几何图形转换为地理 - 您的索引在几何图形上,因此无法使用。我猜你这样做是为了输入以米为单位的距离。您可以将几何列转换为地理,或在 actual_location::geography 上创建索引。
-
感谢您抽出宝贵时间回答,我已经回答了,它有效。干杯!
标签: postgresql indexing postgis