我有一个查询,该查询正确地按照最接近的距离先返回给定Point()
的X英里以内的行,但是我在优化查询时遇到了问题,该查询目前需要6-8秒才能从中返回10行一个包含约25万行的表。
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
答案 0 :(得分:0)
您可以尝试在where子句中添加其他条件,以检查位置是否带有信封(posX-dist / 2,posY-dist / 2),(posX + dist / 2,posY + dist / 2)。这将使计算更加容易,并且如果记录不包含信封,则会立即将其排除在外,并且不会执行耗费资源的操作ST_Distance_Sphere。
我尝试做一次并得到改进。但是,我是使用相当老的MySQL版本来完成此操作的,因此新版本可能不会从这种方法中受益。