gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:42:46 25 4
gpt4 key购买 nike

我使用带有innoDB存储引擎的MySQL数据库。我试图加快按纬度和经度搜索地点的查询速度,但我发现半径较小、结果较少的搜索比结果较多的搜索执行得更慢。 (经纬度相同,列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 个结果所需的时间比返回它们所需的时间更长。 我很想知道如果使用 SQL_NO_CACHE 重复执行这些查询,性能差异是否会消失。

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

关于php - 更多结果 - 更快的查询(在 mysql 中按纬度和经度搜索),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35488496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com