并且这个索引基数也不是一成不变的 , 会随着数据持续增删改 , 当变更的数据超过1/M时才会触发 , M值是根据MySQL参数innodb_stats_persistent得到的 , 设置为on是10 , off是16 。
在MySQL8.0这个默认值为on , 也就是说当这张表的数据变更超过总数据的1/10就会重新触发采样统计 。
三、不同count的用法以下所有的结论都基于MySQL的Innodb存储引擎 。
count(主键ID)
innodb引擎会遍历整张表 , 把每一行的ID值都那出来 , 然后返回给server层 , server层拿到ID后 , 判断不可能为空 , 进行累加 。
count(1)
同样遍历整张表 , 但不取值 , server层对返回的每一行 , 放一个数字1进去 , 判断是不可能为空的 , 按行累加 。
count(字段)
分为两种情况 , 字段定义为not null和null
- 为not null时:逐行从记录里面读出这个字段 , 判断不能为null , 累加
- 为 null时:执行时 , 判断到有可能是null , 还要把值取出来再判断一下 , 不是null才累加 。
这个哥们就厉害了 , 不是带了就把所有值取出来 , 而是MySQL做了专门的优化 , count ()肯定不是null , 按行累加 。
结论
按照效率的话 , 字段 < 主键ID < 1 ~ , 最好都使用count() , 别花里胡哨的 。
五、总结本期文章就一句话 ,
统计总数就用count(*) , 别花里胡哨的
。坚持学习、坚持写作、坚持分享是咔咔从业以来所秉持的信念 。 愿文章在偌大的互联网上能给你带来一点帮助 , 我是咔咔 , 下期见 。
- 飞利浦|飞利浦今年第2款智能手机上市,名为PH2线上首发价仅759元,面向百元级市场
- MySQL|终于跑路了!三星关停越南工厂,欲将产能转移至他国
- 飞利浦·斯塔克|中国广电将从五个方面推动网络建设:第四家运营商服务越来越近!
- MySQL|vivo X80、NEX5、S12曝光 搭载天玑和骁龙旗舰芯
- 数据库|原来这才是Python连接mysql数据库的正确姿势!(一)
- 飞利浦|飞利浦B8905体验测评:8个发声单元+7.1.2声道杜比全景声的沉浸
- 删除|什么?还在用delete删除数据《死磕MySQL系列 九》
- MySQL|红米K50新机全面曝光,骁龙898+百瓦快充+柔性直屏,米粉期待已久
- 飞利浦|?飞利浦空调三大挑战:品牌授权、格力态度和存量市场
- OLED|飞利浦65PUF7294大型OLED电视评测:绝美影音感动、智慧旗舰首选