优化我附近的MYSQL查询位置

时间:2018-07-09 04:51:39

标签: mysql

我有一个查询,导致我的网站运行非常缓慢。本质上,它可以从大约2m条记录的数据库中识别到经度/纬度点最近的位置。

当前此查询需要7秒才能完成。

我已经执行了以下操作来加快速度(在超过15秒之前!)

为名称/经度/纬度/路径添加了索引键 将路径存储在数据库中,因此无需运行 将结果存储到另一个表中,因此我们不必再次运行查询。 考虑过按国家/地区拆分数据库,但是如果最近的位置在邻国/地区,则会造成问题。

还有其他想法吗?有没有办法限制查询中的经度/纬度,例如+或-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

1 个答案:

答案 0 :(得分:2)

请勿使用latitudelongitude列,因为这样索引就没用了,因为您每次查询时都需要为每条记录计算距离度量,而无法对其进行优化。

MySQL现在支持使用POINT数据类型和CREATE SPATIAL INDEX的地理空间数据,MySQL知道如何进行优化。

类似this的事物;尽管MySQL 8.0应该甚至是better