我有一个查询可以按照最接近距离的顺序正确地返回给定Point()的X英里内的行,但我在优化查询时遇到了问题,该查询目前需要6-8秒才能从包含大约25万行的表中返回10行。
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
发布于 2018-12-03 08:52:23
您可以尝试在where子句中添加附加条件,以检查位置是否与信封(posX - dist/2,posY - dist/2),(posX + dist/2,posY + dist/2)。这是更容易的计算,如果记录没有使用信封,它将被立即排除,并且不会执行更耗费资源的操作ST_Distance_Sphere。
我曾经尝试过这样做,并得到了改进。但是,我使用的是相当旧的MySQL版本,所以新版本可能不会从这种方法中受益。
https://stackoverflow.com/questions/53581347
复制相似问题