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(*)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。