MySQL count(*)总结

对于myisam存储引擎,使用count(*)会非常迅速,因为其存储引擎不支持行级锁,所以维护一个总条数的代价较小,其在存储引擎内部存储了总行数这个值,所以很容易就得出count(*)

对于innodb存储引擎,因为支持行级锁,一张表会有多个事务进行并发修改操作,每个事务都会影响总行数,所以为了不影响并发性,其存储引擎内部并没有维护这个总行数,自然count(*)需要遍历表中的每个记录来得出,所以特别慢


但是,myisam的count(*)非常快速返回,是有前提条件的,就是不可以带where条件查询,否则它一样需要走全表扫描,性能跟innodb的效果是一样的


另外,count(1)的性能和count(*)的性能是一样的,mysql的优化器会自动对count(*)进行优化,甚至是对count(1)也优化成count(*)的形式,而不会像一般我们想象的那样,将count(*)中的*展开成各个列


最后,count(*)和count(col)是不一样的,count(*)返回表中所有记录的总行数,而count(col)是返回表中col列的值不为NULL的总行数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值