MYSQL的order on count(*)对性能有一定的影响



我有一个简单的查询,它计算记录的数量是一个普通的查询与一些内部连接和一些条件。

像这样。

select count(*)
from ......
where ....
order by .........at most 4 fields.

我的问题是ascdesc最多4个字段的顺序对性能有一些影响?或者只是被引擎忽略或优化。

首先,我应该注意到您编写的查询将只返回一行。你有一个没有GROUP BY的聚合函数。在这种情况下,ORDER BY基本上是一个no-op(我不知道MySQL是否会对一行进行操作)。

一般来说,order by对性能的影响取决于行数,而不是键数

我只能想到两种order by对性能影响最小的情况:

  • 可以使用索引进行排序。
  • 它遵循GROUP BY并使用聚合键(这只在MySQL中为GROUP BY进行排序)。

当然,在少数行(例如4 )上使用ORDER BY在性能方面可以忽略不计。

但是,这种影响与键的大小的关系要小得多,而与行数和行的总体大小的关系要大得多。对于多个连接和WHERE子句,查询不太可能(但并非不可能)使用ORDER BY的索引。

mysql DOC http://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html

在某些情况下,MySQL可以使用索引来满足ORDER BY子句不做额外的排序。

即使ORDER BY不匹配,也可以使用该索引索引准确,只要将所有未使用的部分和全部索引额外的ORDER BY列是WHERE子句

中的常量。

在你使用count的情况下,索引不应该被使用(因为它不是索引的一部分),然后在某种程度上,这种顺序会对性能产生影响。

尊重你的问题没有被忽略,也没有被引擎优化

最新更新