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(*)
发表回复