优化我的MYSQL查询

优化我的MYSQL查询,mysql,Mysql,我有一个查询导致我的网站运行非常慢。从本质上讲,它从一个大约2百万条记录的数据库中识别出离经纬度点最近的位置 目前,此查询需要7秒钟才能完成 我做了以下几点来加速它(在超过15秒之前!) 为名称/经度/纬度/路径添加索引键 将路径存储在数据库中,以便它不需要运行 将结果存储到另一个表中,因此我们不必再次运行查询。 考虑按国家分割数据库,但如果最近的位置在邻国,则会导致问题 还有其他想法吗?是否有可能限制查询中的经度/纬度,例如+2度或-2度 SELECT name,path, ( 6371 *

我有一个查询导致我的网站运行非常慢。从本质上讲,它从一个大约2百万条记录的数据库中识别出离经纬度点最近的位置

目前,此查询需要7秒钟才能完成

我做了以下几点来加速它(在超过15秒之前!)

为名称/经度/纬度/路径添加索引键 将路径存储在数据库中,以便它不需要运行 将结果存储到另一个表中,因此我们不必再次运行查询。 考虑按国家分割数据库,但如果最近的位置在邻国,则会导致问题

还有其他想法吗?是否有可能限制查询中的经度/纬度,例如+2度或-2度

SELECT name,path, ( 6371 * acos( cos( radians(?) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(?) ) + sin( radians(?) ) * sin( radians( latitude ) ) ) ) AS distance FROM ".$GLOBALS['table']." HAVING distance < 200 AND path IS NOT NULL
选择名称、路径(6371*acos(cos(弧度(?))*cos(弧度(纬度))*cos(弧度(经度)-弧度(?)+sin(弧度(?))*sin(弧度(纬度)))作为距离“$GLOBALS['table]”的距离。距离小于200,路径不为空

不要使用
纬度
经度
列,因为这种方式索引是无用的,因为每次查询时都需要计算每条记录的距离度量,而无法对其进行优化

MySQL现在支持使用
数据类型和
创建空间索引
的地理空间数据,MySQL知道如何优化这些数据


有点像;尽管MySQL 8.0应该是公平的。

非常感谢您的帮助!这太棒了:):)希望对你有用。我自己还没有在大数据上使用它;所以先做测试。:)我怀疑Amadan的一个链接中包含了这一点,但如果没有,也可以看看包括bounding Boxes在内的测试,谢谢你的建议。您是否测试过边界框是否比这样的查询有性能提升()。我怀疑它可能是,但在网上找不到任何东西来证实这一点。我还没有测试点数据类型,但我不明白为什么ia bounding box在这种情况下也没有帮助。