【发布时间】:2021-10-02 13:13:43
【问题描述】:
我认为我的查询没有经过优化。
我想对距某个点一定距离的文件(每个文件包含 1 lon 和 1 lat)进行排序,并显示文件与给定点之间距离的计算。
SELECT *, ST_DistanceSphere( st_point(lon, lat) , st_point(49.9, 6.7)) as result from data
where
ST_DistanceSphere( st_point(lon, lat) , st_point(49.9 ,6.7)) < 10000
所以我想检索距离小于 10,000 米的点列表,并且结果列包含计算出的距离。 返回结果需要1秒以上。
要么没有优化,要么在 postgis 中还有另一种方法可以更快地得到答案...
您能帮我优化一下这个查询吗?
我的桌子:
drop table if exists data cascade;
CREATE TABLE data(
idSERIAL PRIMARY KEY,
lon float,
lat float,
);
谢谢
【问题讨论】:
-
除了索引,为什么不显示创建表并解释您的查询
-
这篇文章或许能解决你的问题:gis.stackexchange.com/questions/77072/…
-
nbk: 我不知道给 lon 和 lat 添加索引是否能解决我的速度问题
-
anamul:4326 会比我的要求快吗?一开始我试过了,我不相信,然后我可能犯了一个错误
-
SELECT *, ST_DistanceSphere( ST_SetSRID(st_point(lon, lat), 4326) , ST_SetSRID(st_point(6.49413, 49.181477), 4326)) 作为结果来自数据 WHERE ST_DWithin(ST_SetSRID(ST_MakePoint(lon, lat), 4326), ST_SetSRID(ST_MakePoint(6.49413, 49.181476), 4326), 10) 按结果限制排序 10 响应时间比以前更糟
标签: sql postgresql postgis