gpt4 book ai didi

MySQL 查询优化

转载 作者:搜寻专家 更新时间:2023-10-30 20:20:04 25 4
gpt4 key购买 nike

我有以下查询来从 MySQL(所有 InnoDB)中选择用户及其位置等。 userblocked_userblocked_countries 表各有大约 200 万行,countries 大约有 250,regions 大约 3500 和 cities 大约 280 万。

问题是在 WHERE 子句中没有 AND co.country_id='us' 时,查询速度非常快(0.05 秒)。然而,我尝试了很多,但感觉肯定有更简单更好的查询方式,不是吗?

我错过了什么?非常感谢任何帮助!非常感谢您!

最佳答案

再次感谢您的帮助。最后,我找到了解决问题的方向。性能问题主要是由于范围扫描和 ORDER BY ... LIMIT 混合造成的。

所以,我学到了很多关于索引的知识(对我来说是新的),并且发现如果你有一个范围扫描(在我的例子中年龄在 x 和 y 之间),那么范围列必须是串联中的最后一个索引,否则索引不能完全使用。此外,用于对结果进行排序的列,必须位于索引的最后。因此,给定范围扫描和 ORDER BY 的混合,您需要决定是否应使用索引进行排序或选择。

在我的例子中,这意味着为几个索引考虑一些好的组合,其中要排序的剩余行只是非常少,或者如果搜索不能缩小到只有一些行,将使用一个单独的索引用于排序,因为查询将快速找到 LIMIT 给定的行数。

关于MySQL 查询优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10969108/

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