gpt4 book ai didi

mysql - 条件顺序是否会影响 MySQL 的性能?

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

假设我有一个这样的 MySQL 查询,PEOPLE 表有大约 200 万行:

SELECT * FROM `PEOPLE` WHERE `SEX`=1 AND `AGE`=28;

第一个条件将返回 100 万行,第二个条件可能返回 20,000 行。从本地网站来看,大部分开发者表示,改变它们的顺序会产生更好的效果。他们还说,如果更改顺序,将导致 200 万 + 100 万 + *10,000* I/O 时间,而上面的原始查询将导致 200 万 + 20,000 + * 10,000* I/O 时间。听起来很有道理。

众所周知,MySQL 有一个用于此类工作的内部查询优化器。订单是否需要特别注意以获得最佳性能?我完全糊涂了。

PS:我注意到已经有一些类似的问题被问过了,但是他们是两年或三年前的事了,看来再问一次更好。


谢谢大家注意到这个问题。这是关于为什么我再次询问的解释:

在我问这个问题之前,我运行了几次 EXPLAIN。答案是顺序无关紧要。但是面试官告诉我订单会影响性能,我想确定是否有遗漏的东西。

最佳答案

你首先应该了解一个基本的东西:理论上,关系数据库没有索引

纯理论关系数据库引擎确实会扫描所有 记录,检查sexage 列的标准,并只返回相关的行。

但是,索引是 SQL 数据库引擎添加的一个公共(public)层,用于更快地过滤行。在这种情况下,您应该为这两列都有索引。

此外,这些相同的数据库引擎对这些索引(如果有)进行分析,以确定最佳可能的操作过程,以更快地检索相关行。特别是,索引元数据中的一个标准是 cardinality :对于索引列的给定值,平均匹配多少行?行数越高,基数越低。因此,基数越高越好。

因此,SQL 引擎的查询优化器肯定会选择先查找age 索引,然后再查找sex 索引来切分结果集。如果它确定仅通过查找 sex 列可以更快,它甚至可以选择完全使用 sex 上的索引第一个过滤器产生的每一行的值。这很可能在这里,因为 sex 列的基数低得离谱。

看看here了解关系模型。

关于mysql - 条件顺序是否会影响 MySQL 的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17565814/

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