【问题标题】:Postgresql gist index ignored for st_dwithinst_dwithin 忽略 Postgresql 要点索引
【发布时间】: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


【解决方案1】:

原来我应该这样创建索引:

CREATE INDEX example_idx ON geometries USING GIST (geography(actual_location));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 2010-10-31
    • 2017-03-27
    相关资源
    最近更新 更多