MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高
InnoDB 引擎执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数

count(id) innoDB会遍历表,把id取出来,返回server层,server层进行判断,不为空则累加1;
count(1) innoDB会遍历表,但不取出来,返回server层,server层进行判断,不为空则累加1;
count(字段)innoDB会遍历表,把字段取出来,返回server层,server层进行判断,不为空则累加1;
count() innoDB专门做了优化,不取值,cout()肯定不是null,按行累加

效率排序:
count(字段)<count(主键 id)<count(1)≈count(*)
尽量使用count(*)


AshShawn
6 声望2 粉丝

« 上一篇
mysql--锁