0

如果我们有复杂的查询,对 where 子句进行排序可以加快这个过程吗?

如果我们将子句从可能较小的收益排序到较大的收益,它是否有任何性能差异?

例如:

  • 来自 1.000 人。
  • 700名女性,
  • 其中300人毕业
  • 其中50人也是音乐家。

1

WHERE gender = 'female'
AND education = 'college'
AND hobby = 'music'

还是这样更好?

2

WHERE hobby = 'music'
AND education = 'college'
AND gender = 'female'
4

2 回答 2

3

不,中的子句顺序WHERE无关紧要。

这就是查询优化器使用列统计信息所做的事情。

于 2013-09-07T11:24:24.910 回答
1

您可以在 WHERE 子句中提供的大部分部分,从组合索引的第一个部分到最后一个部分匹配,您将获得最佳性能。(一般来说,你可以按任何顺序写,但开头部分不能有任何遗漏)

示例:
给定这个索引 lastname, firstname, age和一个大表,这是一个从最佳到最差性能查询的列表:

where lastname = 'gonzalez' and firstname='juan' and age=70
where lastname = 'gonzalez'
where age = 70

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

因此,重要的部分是建立良好的索引:通常是整数上的主键,以及其他一些(组合或不组合)字段匹配请求的字段,例如您的问题。最后一句话:太多的索引在空间上付出了代价并插入了性能。

于 2013-09-07T11:24:18.483 回答