从以前的博客中总结中的count(*) 和count(id)的区别就是:count(*)查询的是总条数,count(id)查询的是id非null的条数。
再实际开发过程中,需要查询符合某个查询条件的总条数时,这两个有很大的查询效率区别;
我开发过程中遇到了一个表有200多万条数据,需要查询某个条件的总条数时,对于上述两个细节的选择会产生很大的查询效率差异。
表中有id,status,compiler_id,.....;status,compiler_id是建的(status,compiler_id)组合索引。
我需要查询status = 1 and compiler_id = 1的总条数时,使用count(id)会花15s左右,而count(*)只需要不到1s。
使用explain观察,结果如下:
count(*)的 Extra 是Using index;