gpt4 book ai didi

sql - 在与 WHERE 共享的计算上优化 MySQL ORDER BY

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

我有一个 MySQL SELECT 查询,它在 WHERE 子句中使用毕达哥拉斯来计算距离,以将结果限制在特定半径范围内。

我还在 ORDER BY 子句中使用完全相同的计算,首先按最小距离对结果进行排序。

MySQL 是否计算两次距离(一次用于 WHERE,另一次用于 ORDER BY)?

如果是这样,我如何优化查询以便只计算一次(如果可能的话)?

最佳答案

Does MySQL calculate the distance twice (once for the WHERE, and again for the ORDER BY)?

不会,完全一样的写法就不会计算两次。但是,如果您的目标是提高应用程序的性能,那么您可能希望着眼于更大的图景,而不是专注于这个可能给您带来最多两倍差异的次要细节。一个更严重的问题是您的查询阻止了索引的有效使用,并将导致完全扫描。

我建议您更改数据库,以便使用几何类型并创建 spatial index在你的数据上。然后你可以使用MBRWithin快速找到位于圆圈边界框内的点。一旦找到这些点,您就可以仅在这些点上运行成本更高的距离测试。如果您的表很大并且典型的搜索仅返回一小部分行,则此方法会明显更快。

如果您不能更改数据模型,那么您仍然可以通过首先使用边界框检查来提高性能,例如 WHERE x BETWEEN 10 AND 20 AND y BETWEEN 50 AND 60。边界框检查将能够使用索引,但由于 R-Tree 索引仅在几何类型上受支持,因此您将不得不使用标准 B-Tree 索引,该索引对于此类查询效率不高(但仍然很多比你现在做的更好)。

关于sql - 在与 WHERE 共享的计算上优化 MySQL ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4180000/

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