条件的顺序是否会在MySQL中产生性能差异?

时间:2013-07-10 08:29:34

标签: mysql

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

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

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

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

PS:我注意到已经有一些类似的问题,但是它们是两年前或树年前,似乎再问一次更好。


谢谢大家注意到这个问题。这是我再次询问的原因的解释:

在我提出这个问题之前,我运行了几次EXPLAIN。答案是顺序无关紧要。但是采访者告诉我,订单会有所不同,我想确定是否有遗漏的东西。

1 个答案:

答案 0 :(得分:1)

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

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

但是,索引是SQL数据库引擎添加的公共层,可以更快地过滤行。在这种情况下,您应该拥有这两列的索引。

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

因此,SQL引擎的查询优化器肯定会选择通过首先查找age索引来切换结果集,然后只查找sex的索引。它甚至可以选择来使用sex上的索引,只要它通过查找每行的sex列值来确定它可以更快。第一个过滤器。这可能就在这里,因为sex列的基数非常低。

看看here,了解关系模型的介绍。

相关问题