共计 366 个字符,预计需要花费 1 分钟才能阅读完成。
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(*)
正文完