更多结果 - 更快查询(按 mysql 中的经纬度搜索)

More results - faster query (search by latitude and longitude in mysql)

我使用 MySQL 数据库和 innoDB 存储引擎。 我试图加快按纬度和经度搜索地点的查询,我发现半径较小、结果较少的搜索比结果较多的搜索执行得慢。 (经纬度相同,列ID为主键)。

0.0011 秒,15404 个结果

SELECT ID, 69.0 * DEGREES(ACOS(COS(RADIANS(51.5099983215332)) *
    COS(RADIANS(Lat)) * COS(RADIANS(-0.05000000074505806) - RADIANS(Lng)) +
    SIN(RADIANS(51.5099983215332)) * SIN(RADIANS(Lat)))) AS distance
FROM Table 
WHERE (Lat BETWEEN 51.5099983215332 - (18 / 69.0)
               AND 51.5099983215332 + (18 / 69.0)
   AND Lng BETWEEN -0.05000000074505806 - (18 / (69.0 * COS(RADIANS(51.5099983215332))))
               AND -0.05000000074505806 + (18 / (69.0 * COS(RADIANS(51.5099983215332)))) ) 
HAVING distance <= 18 

0.0319 秒,105 个结果

SELECT ID, 69.0 * DEGREES(ACOS(COS(RADIANS(51.5099983215332)) *
    COS(RADIANS(Lat)) * COS(RADIANS(-0.05000000074505806) - RADIANS(Lng)) +
    SIN(RADIANS(51.5099983215332)) * SIN(RADIANS(Lat)))) AS distance
FROM Table
WHERE (Lat BETWEEN 51.5099983215332 - (0.5 / 69.0)
               AND 51.5099983215332 + (0.5 / 69.0)
   AND Lng BETWEEN -0.05000000074505806 - (0.5 / (69.0 * COS(RADIANS(51.5099983215332))))
               AND -0.05000000074505806 + (0.5 / (69.0 * COS(RADIANS(51.5099983215332)))) ) 
HAVING distance <= 0.5 

可以吗?

HAVING 在除 ORDER BYLIMIT 之外的所有内容之后应用,因此缩小它的条件可能会对查询时间产生边际影响。在这种情况下,我的猜测是(除了正常的性能变化之外)丢弃 15299 个结果比丢弃 return 个结果花费的时间更长。 我很想知道如果使用 SQL_NO_CACHE.

重复执行这些查询,性能差异是否会消失

为了加快查询速度,在 lat, lnglng, lat 上添加索引是有意义的;顺序并不重要。