分析一下MySQL中的 count(*) 真的要比 count(1) 快吗?

文 / @WordPress主题

在MySQL中,主键索引和普通索引是不同的。主键索引是由MySQL自动创建的,而且是根据表定义的主键创建的。主键索引的每一行都有一个唯一标识符,因此在使用主键索引统计数据时,MySQL可以直接使用它来提高查询效率。

而普通索引是由用户创建的索引,它不一定是唯一的,也不一定是根据某个字段创建的。当使用普通索引统计数据时,MySQL需要首先通过索引找到符合条件的记录,然后再对找到的记录进行计数。因此,在计算统计结果时,相对于主键索引,普通索引需要更多的IO操作,效率相对较低。

3.2 count(*)和count(1)的区别

count(*)和count(1)都可以用来统计表中的记录数,它们之间的差别在于count(1)只会匹配一列数据,因为它始终返回1,而count(*)则会匹配所有的列,然后返回一个计数值。

然而,由于count(*)和count(1)都需要遍历整张表来统计记录数,因此它们的效率差别是微乎其微的,几乎可以忽略不计。

4.总结

在MySQL中,使用count(*)和count(1)都可以用来统计表中的记录数,它们之间的效率差别微乎其微。但是,使用主键索引可以提高查询效率,因此在使用count(*)或count(1)统计记录数时,尽量使用主键索引来提高效率。

对于使用MyISAM存储引擎的表,count(*)和count(1)的效率差别明显,因为MyISAM存储引擎在统计记录数时,可以使用一个类似于数据缓冲池的技术,将表数据缓存在内存中,从而提高统计效率。但是,由于MyISAM存储引擎已经不再建议使用,因此本文不做详细讨论。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。