count(字段)<count(主键id)<count(1)≈count(*)
- 建议使用count(*)
- count(主键id),先取出到service层,判断不为null,在+1
- count(1),判断这行有值,取1到service,判断不为null,+1
- count(字段)
- 设置为不能为null:就直接按行取值,然后按行累加
- 设置可为null:取值到service层,判断不为null,再+1
- count(*)
- 如果是myISAM,没有条件的话,就直接从文件取
- 如果是innodb的话,就把行取出,累计计数,在保证逻辑的时候,会尽量减少扫描数据量,所以优化器会找最小的树来遍历
- show table status,按照的采样估算法,所以不准确