首先来了解一下MYSQL 中的 COUNT(*)
count()四种写法:
count(*) 包括所有列,相当于统计表的行数,不忽略列值为NULL的记录。
count(1) 忽略所有列,1表示一个固定值,也可以用count(2)、count(3)代替,不忽略列值为NULL的记录。
count(列名) 只包括指定列,返回指定列的记录数,会忽略列值为NULL的记录。
count(distinct 列名) 只包括列名指定列,返回指定列的不同值的记录数,忽略列值为NULL的记录
执行效率比较
若列为主键,count(列名)效率优于count(1)
若列不为主键,count(1)效率优于count(列名)
若表中存在主键,count(主键列名)效率最优
若表中只有一列,则count(*)效率最优
若表有多列,且不存在主键,则count(1)效率优于count(*)
特例
select count(’’) from table;-返回表的记录数
select count(0) from table;-返回表的记录数
select count(null) from table;-返回0
.带有count的sql语句只会返回一条记录
select *,count() from `sys_user` limit 0,8;
接着看看执行顺序
带有limit的sql语句是最后执行的
select *,count() from `sys_user` limit 0,8;
以上sql语句将返回空行,*因为count()只会使sql语句产生一条结果记录,所以后面的limit 1,500 是完全找不到的。
两个条件不能混用
SELECT COUNT(1) FROM ( SELECT * FROM sys_user LIMIT 0,20 ) temp;