【面试一个个啃】mysql面试:基础面试:count(1),count(*),count(列)区别是啥?

问:

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心情:执行计划   ^_^

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值