如果我们有复杂的查询,对where子句进行排序可以加快这个过程吗?
如果我们从可能较小的回报到较大的回报对条款进行排序,是否有任何性能差异?
例如:
- 从 1.000 人。
- 700人是女性,
- 其中300人毕业
- 其中50人也是音乐家。
1
WHERE gender = 'female'
AND education = 'college'
AND hobby = 'music'
还是更好的是这个?
阿拉伯数字
WHERE hobby = 'music'
AND education = 'college'
AND gender = 'female'
不,WHERE
中子句的顺序无关紧要。
这就是查询优化器使用列统计信息执行的操作。
- 控制查询优化器
- MySQL 查询优化器从哪里读取索引统计信息?
- 优化概述
- 优化和索引
您可以在 WHERE 子句中提供的最多部分,从组合索引的第一部分到最后一部分进行匹配,这是您将拥有的最佳性能。(一般来说,你可以按任何顺序书写,但开头部分没有任何遗漏)
例:
给定此索引lastname, firstname, age
和一个大表,这是最佳到最差性能查询的列表:
where lastname = 'gonzalez' and firstname='juan' and age=70
where lastname = 'gonzalez'
where age = 70
如上所述,写入顺序通常无关紧要,因为查询优化器无论如何都可以管理它以匹配任何索引。
因此,重要的部分是构建良好的索引:在整数上设置一个主键,在字段上使用其他一些(组合与否)匹配请求,就像您的问题中一样。 最后一句话:太多的索引在空间中支付并插入性能。