mysql优化几何查询

6pp0gazn  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(475)

我有一个查询,它可以正确地返回给定行的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

ny6fqffe

ny6fqffe1#

您可以尝试在where子句中添加附加条件,以检查包含信封的位置(posx-dist/2,posy-dist/2),(posx+dist/2,posy+dist/2)。这是更容易的计算,如果记录不与信封,它将被排除在外,直接和更昂贵的资源操作st\u距离球将不会执行。
我试过一次并得到了改进。不过,我是用很旧的mysql版本来完成的,所以新版本可能不会从这种方法中受益。

相关问题