gpt4 book ai didi

mysql - 根据距离优化用户数据库搜索

转载 作者:行者123 更新时间:2023-11-29 06:06:39 24 4
gpt4 key购买 nike

抱歉,如果这个问题已经得到解答(我相信如果有的话,有人会向我抛出链接)。我前段时间也想过类似的问题,但现在找不到了。

因此,对于这个问题:我正在为我正在开发的网站构建用户搜索,并且搜索条件之一将基于与搜索用户的距离。我已经有一张美国邮政编码及其相应的纬度/经度表。我还弄清楚了如何确定边界框(最大纬度/最小纬度 - 最大长/最小长),以确定哪些 zipper 符合标准(我们不会担心精确的半径。地理正方形暂时就够了)。我的问题 - 我应该如何构建查询以优化速度?我应该:

  • 执行所需的数学运算来确定边界框,然后查询邮政编码表以查找所有潜在候选邮政编码,然后搜索具有这些邮政编码中的任何一个的用户?

  • 确定纬度/经度边界框,将 zip 表与用户表连接起来,并返回纬度/经度位于参数之间的用户的结果?

我想第二种方法会更快,但我没有支持证据/具体经验表明它会更快。我了解足够的 SQL 知识,但我对它还是有点陌生​​,并且对于不同类型操作的相对性能一无所知。

感谢您的宝贵时间!

最佳答案

我相信您的最终查询应该如下所示:

-- compute @minLat, @maxLat, @minLon, @maxLon

SELECT users.*
FROM users
JOIN locations ON locations.id = users.location
WHERE locations.latitude BETWEEN @minLat AND @maxLat
AND locations.longitude BETWEEN @minLon AND @maxLon

所以在这种情况下,我不理解你的担忧,因为一切都是一次性发生的。查询优化器通常比任何人都更了解首先执行哪个 JOIN

如果您想实现更复杂的计算来确定邮政编码是否在范围内,那么我更愿意首先建立邮政编码列表,然后匹配居住在这些区域的用户。

这假设计算邮政编码是否在搜索范围内是操作中成本最高的部分。因此,我更喜欢使用尽可能小的数据集(即仅邮政编码,而不是邮政编码+用户)来运行此计算。即使在这种情况下,查询优化器也可能为您做出正确的选择。

关于mysql - 根据距离优化用户数据库搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11252534/

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