通过空间索引优化邻近位置MYSQL查询
我正在尝试优化SQL查询以显示最近的位置 最初我使用的是以下查询通过空间索引优化邻近位置MYSQL查询,mysql,Mysql,我正在尝试优化SQL查询以显示最近的位置 最初我使用的是以下查询 SELECT name,path, ( 6371 * acos( cos( radians(-36.848461) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(174.763336) ) + sin( radians(-36.848461) ) * sin( radians( latitude ) ) ) ) AS distance FR
SELECT name,path, ( 6371 * acos( cos( radians(-36.848461) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(174.763336) ) + sin( radians(-36.848461) ) * sin( radians( latitude ) ) ) ) AS distance FROM cityDB HAVING distance < 200 AND path IS NOT NULL
然而,这比第一个查询平均长23秒,这让我非常惊讶
我是否应该对我的查询做些其他事情来加速它
我得到的唯一一件事是在1秒之内把它添加到这篇文章中
然而,代码中有几个bug。如果我选择斐济,它将只显示<180纬度的位置,如果我选择瓦努阿图,它将只选择<180纬度的位置
SELECT DISTINCT name, (ST_Length
(ST_LineStringFromWKB(LineString( pt, ST_PointFromText('POINT(-179.276277 -18.378639)', 4326)))))
AS distance FROM CityDB
WHERE longitude BETWEEN -179.276277 - (50.0 / (111.045*COS(RADIANS(-18.378639)))) AND -179.276277 + (50.0 / (111.045 * COS(RADIANS(-18.378639))))
GROUP BY (name) ORDER BY distance ASC LIMIT 99
除此之外,它还将显示俄罗斯境内几英里以外的位置。我知道我们可以增加距离限制,但肯定有比这更好的方法
还有其他有效的方法来进行这样的查询吗
共享表结构就像您链接到的问题中一样,使用ST_distance或ST_distance_sphere而不是ST_Length。您好,在那里,尝试使用ST_distance仍然18秒来运行查询选择名称ST_distancept,POINT174.763336,-36.848461作为与城市的距离Db ORDER BY distanceRaw LIMIT 50
longitude BETWEEN longpoint - (50.0 / (111.045 * COS(RADIANS(latpoint))))
AND longpoint + (50.0 / (111.045 * COS(RADIANS(latpoint))))
SELECT DISTINCT name, (ST_Length
(ST_LineStringFromWKB(LineString( pt, ST_PointFromText('POINT(-179.276277 -18.378639)', 4326)))))
AS distance FROM CityDB
WHERE longitude BETWEEN -179.276277 - (50.0 / (111.045*COS(RADIANS(-18.378639)))) AND -179.276277 + (50.0 / (111.045 * COS(RADIANS(-18.378639))))
GROUP BY (name) ORDER BY distance ASC LIMIT 99