做一个积极的人

编码、改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》中有如下:

  1. 当mysql确认括号内的表达式值不可能为空时,实际上就是在统计行数

  2. 如果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/

愿你我在人生的路上能都变成最好的自己,能够成为一个独挡一面的人

© 每天都在变得更好的阿飞云

最新文章

  1. sqlserverdriver配置方法 jdbc连接sqlserver
  2. vbox 不识别u盘的问题
  3. Guava - 并行编程Futures
  4. 廖雪峰教程笔记:js中map和reduce的用法
  5. CSS的四种引入方式
  6. WWDC2015—图解
  7. cocos2dx新建android项目lib拷贝、访问权限等问题集
  8. MySQL 性能监控 4 大指标
  9. qnx:从API开始理解QNX -- 消息传递
  10. dephi中单击鼠标拖动窗口(使用WM_SYSCOMMAND)
  11. Bootstrap 按钮分组
  12. Word2Vec总结
  13. CSS3 Flex布局
  14. 关于JQuery中$.get()和$.post()和$.ajax()的区别和使用
  15. Android 修改 Menu字体颜色
  16. [转帖]Nginx的超时keeplive_timeout配置详解
  17. Hibernate使用固定值关联表
  18. 附加属性来控制控件中,要扩展模块的visibility
  19. 新手搭建 x-boot 编译环境笔记
  20. day91 DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

热门文章

  1. HearthBuddy 调试肯瑞托法师寒冰屏障的配合
  2. ISO/IEC 9899:2011 条款6.2.4——对象的存储持久性
  3. 一个漂亮的输出MySql数据库表结构的PHP页面
  4. python中的列表推导式——轻量级循环
  5. jQuery前端插件以及图片延迟加载
  6. Java使用JDBC连接数据库逐条插入数据、批量插入数据、以及通过SQL语句批量导入数据的效率对比
  7. 编写高质量iOS代码与OS X代码的effective方法(小结)
  8. Moq中判断方法是否被执行时,参数中有列表的情况
  9. 【计算机视觉】OpenCV读取视频获取时间戳等信息(PS:经测试并不是时间戳,与FFMPEG时间戳不一样)
  10. 【miscellaneous】gstreamer构建的简单方法