MySQL 的COUNT(x)性能怎么样?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL 的COUNT(x)性能怎么样?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2021字,纯文字阅读大概需要3分钟。
内容图文
![MySQL 的COUNT(x)性能怎么样?](/upload/InfoBanner/zyjiaocheng/509/5e654ad9f0f94d72b66c82fc3310d496.jpg)
做一个积极的人
编码、改bug、提升自己
我有一个乐园,面向编程,春暖花开!
x 可以代表: 主键id、字段、1、*
0 说明
对于count(主键id)来说
innodb引擎会遍历整张表,把每一行的id值都取出来,返回给server层,server层判断id值不为空,就按行累加
对于count(字段)来说
如果这个字段定义为not null,一行行的从记录里面读出这个字段,判断不为空,则累加值
如果这个字段定义允许为null,那么执行的时候,判断到有可能为null,还要把值取出来在判断一下,不是null才累加
对于count(1)来说
innodb引擎遍历整张表,但不取值,返回给server层,server对于返回的每一行,放一个数字1进去,判断是不可能为空的,就按行累加
对于count(*)
并不会把全部字段取出来,而是专门做了优化,不取值,count(*)肯定不是null,按行累加
1 总结
如果你要统计行数就用count(*)
或者count(1)
,推荐前者
如果要统计某个字段不为NULL值的个数就用count(字段)
在《高性能MySQL》中有如下:
-
当mysql确认括号内的表达式值不可能为空时,实际上就是在统计行数
-
如果mysql知道某列col不可能为NULL值,那么mysql内部会将count(col)表达式优化为count(*)
也就是说count(主键字段)和count(1)还是要优化到count(*)的。
在 MySQL 5.7 Reference Manual 的官方手册中: https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_count
有这么一段:
InnoDB handles SELECT COUNT(*) and SELECT COUNT(1) operations in the same way. There is no performance difference.
翻译: InnoDB以相同的方式处理SELECT COUNT(*)和SELECT COUNT(1)操作。没有性能差异。
所以这几个按照效率排序的话,count(字段)<count(主键id)<count(1)≈count(*)
所以,尽量使用count(*)
2 拓展
在阿里巴巴的 Mysql数据库 >> ( 三) ) SQL
谢谢你的阅读,如果您觉得这篇博文对你有帮助,请点赞或者喜欢,让更多的人看到!祝你每天开心愉快!
不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!
博客首页 : https://aflyun.blog.csdn.net/
愿你我在人生的路上能都变成最好的自己,能够成为一个独挡一面的人
© 每天都在变得更好的阿飞云
MySQL 的COUNT(x)性能怎么样?
标签:lock ESS fun code 坚持 遍历 javac -o csdn
本文系统来源:https://www.cnblogs.com/aflyun/p/10982377.html
内容总结
以上是互联网集市为您收集整理的MySQL 的COUNT(x)性能怎么样?全部内容,希望文章能够帮你解决MySQL 的COUNT(x)性能怎么样?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。