mysql count count id_mysql 为什么count(*)快于count(id)

其实,挺正常的,count的用法大概有两个,不过一般大家不太注意:

统计某个列( 俗称字段 )有多少个有效值,也就是值不是null的有多少个。

统计记录有多少行,我背诵过的规则是这样的:当count()括弧的表达式被认为不可能为空时,就会自动忽略所有列,直接统计结果记录一共多少行。曾经以为,*的时候,会自动扩展展开所有的列,其实不是。可能是受select(星号)影响。

当不指定条件的时候,count是很快的,指定条件速度会下降。

mysql在设计上,count(星号)性能是很快的,即便是加上where,它就是要比count(col)快,因为count(col)要判断每行是不是NULL,而count( 星号 )也并不是想象中那样扩展所有列,它会直接忽略列而直接统计结果集行数,只要有行就纳入统计,具体这行每列的值是什么对它来说根本不重要,跟select(*)是不同的。

结论就是,如果你要统计记录条数一共多少条,一定要用count(*),而不是count(col),它的性能会更好。当引擎发现你的col不可能为null的时候,它会将col转换成星号,如果楼主用的id时主键,那么其实会被转化成星号,这转化也是耗费性能的。

补充一下:myisam引擎状况下,如果不指定where条件,那么myisam是很迅速,因为不指定条件会直接读取存储引擎存储的一个特殊字段,值是总行数,但是一旦指定where条件,迅速的神话也就没了,沦落和其他引擎差不多了。

易企达10年行业沉淀!专业小程序、公众号H5、APP定制开发

本文原地址:https://www.eqiday.com/66.html

郑重声明内容版权声明:除非注明,否则皆为本站原创文章。如有侵权联系进行删除!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值