SQL(例如MySQL)如何构造多个条件



如果我们有复杂的查询,对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

如上所述,写入顺序通常无关紧要,因为查询优化器无论如何都可以管理它以匹配任何索引。

因此,重要的部分是构建良好的索引:在整数上设置一个主键,在字段上使用其他一些(组合与否)匹配请求,就像您的问题中一样。 最后一句话:太多的索引在空间中支付并插入性能。

最新更新