结论:count(字段)<count(id)<count(1)≈count(*)
count(*)的实现方式
- MyISAM把一个表的总行数储存在磁盘里,count(*)直接返回
- InnoDB一行一行读,累计计数
统计表行数(不准确)
show table status
count(*)、count(主键id)和count(1) 都表示返回满足条件的结果集的总行数;
而count(字段),则表示返回满足条件的数据行里面,参数“字段”不为NULL的总个数。
count不同用法的执行过程:
- count(id):取id值,累加
- count(1):不取值累加
- count(字段):取值,判断是否为null,累加
- count(*):做了优化,不取值累加