MySQL优化几何查询

时间:2018-12-02 14:47:53

标签: mysql optimization spatial

我有一个查询,该查询正确地按照最接近的距离先返回给定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

1 个答案:

答案 0 :(得分:0)

您可以尝试在where子句中添加其他条件,以检查位置是否带有信封(posX-dist / 2,posY-dist / 2),(posX + dist / 2,posY + dist / 2)。这将使计算更加容易,并且如果记录不包含信封,则会立即将其排除在外,并且不会执行耗费资源的操作ST_Distance_Sphere。

我尝试做一次并得到改进。但是,我是使用相当老的MySQL版本来完成此操作的,因此新版本可能不会从这种方法中受益。