问:
mysql中 count(1),count(*),count(列)区别是啥?
面试官心里:
考察面试者MySQL基本调优思路,是否有查看执行计划的习惯
答:
在数据量达到10万以上的级别我们讨论这个问题才有意义.
-
count(*)包括了所有的列,相当于所有的行数,在统计结果的时候,不会忽略列值为NULL的行数统计,理论上会比较慢
-
count(1) 中1代表第一列,在统计结果的时候,不会忽略列值为NULL的行数统计
-
count(列名)只统计包括列名那一列,在统计结果的时候,会忽略列值为null的行数计数,即某个字段值为NULL时,不统计
所以:
-
列名为主键,count(列名)会比count(1)快,当然,第一列为主键则一样快
-
列名不为主键,count(1)会比count(列名)快,当然,列比较多的情况下
-
如果表多个列并且没有主键,则 count(1) 肯定快于 count(*)
-
如果有主键,则 select count(主键)的执行效率是最优的
-
count(1),count(列),count(*) 在列有null值得情况下,结果会不一样
还有一句话:一切都还需要看mysql心情:执行计划 ^_^