先不执行,先简单分析下哪个会比较快
select count(name) from t_user 比 select count(id) from t_user快
辅助索引会比较快,因为二级索引相对主键索引存储数据更少(二级索引存储的是主键,而主键索引存储的整行数据),检索性能应该更高,先去查询非主键索引扫描到一条就加1 ,但是不会计算null情况(相当于扫描name的索引树)
select count(1) from t_user比 select count(name) from t_user 快
因为count(1) 底层优化器自动选择走二级索引,但是它没有拿name的数据 ,它只是在结果集中记录+1而已, 而count(name) 会拿name字段进行转码之类的操作
select count(*) from t_user比 select count(id) from t_user 快
count(*) 底层优化器自动选择走二级索引,但几乎跟count(name)一样
count(*) 不会拿所有字段,只会拿第一个索引字段而已(mysql 5.7后)
select count(id) from t_user 最慢
结论: count(1)> count(name) == count(*)> count(id)