我有一个查询,它可以正确地返回给定行的x英里范围内的行 Point()
首先按最近距离排序,但我在优化查询时遇到了问题,当前从一个包含约250k行的表中返回10行需要6-8秒。
这个
geometry Location
列已具有空间索引。
我当前的查询是:
SELECT *, ROUND(ST_Distance_Sphere(Location, ST_GeomFromText('POINT(lng lat)', 4326)) / 1609.344, 2) as DistanceFromTargetInMiles
FROM Business
-- within 5 miles
WHERE ST_Distance_Sphere(Location, ST_GeomFromText('POINT(lng lat)', 4326)) /1609.344 < 5
-- show closest results first
order by DistanceFromTargetInMiles
asc LIMIT 10
如何提高查询速度?这是mysql 8.0.1.3
1条答案
按热度按时间ny6fqffe1#
您可以尝试在where子句中添加附加条件,以检查包含信封的位置(posx-dist/2,posy-dist/2),(posx+dist/2,posy+dist/2)。这是更容易的计算,如果记录不与信封,它将被排除在外,直接和更昂贵的资源操作st\u距离球将不会执行。
我试过一次并得到了改进。不过,我是用很旧的mysql版本来完成的,所以新版本可能不会从这种方法中受益。