mysql性能优化------获取mysql的行数多少
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql性能优化------获取mysql的行数多少,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1728字,纯文字阅读大概需要3分钟。
内容图文
![mysql性能优化------获取mysql的行数多少](/upload/InfoBanner/zyjiaocheng/523/84292ace59d84ab383d7a2dd65c5bc3f.jpg)
以下讨论是基于InnoDB引擎。
至于分析性能差别的时候,可以记住以下几个原则:
- server层要什么就给什么
- InnoDB只给必要的值
- 现在的优化器只优化了count(*)的语义为“取行数”,其它“显而易见”的优化并没有做。接下来,我们一个个来进行分析。
对于count(主键id)
来说,InnoDB引擎会遍历整张表,把每一行的id值都取出来,返回给server层。server层拿到id后,判断是不可能为空的,就按行累加。
对于count(1)
来说,InnoDB引擎遍历整张表,但不取值。server层对于返回的每一行,放一个数字“1”进去,判断是不可能为空的,按行累加。
单看这两个用法的差别的话,你就能对比出来,count(1)执行的要比count(主键id)快。因为从引擎返回id会涉及到解析数据行,以及拷贝字段值的操作。
对于count(字段)
来说:
- 如果这个“字段”是定义为not null的话,一行行地从记录里面读出这个字段,判断不能为null,按行累加;
- 如果这个“字段”定义允许为null,那么执行的时候,判断到有可能是null,还要把值取出来再判断一下,不是null才累加。也就是前面的第一条原则,server层要什么字段,InnoDB就返回什么字段。
但是count(*)
是例外,并不会把全部字段取出来,而是专门做了优化,不取值。count(*)肯定不是null,按行累加。
看到这里,你一定会说,优化器就不能自己判断一下吗,主键id肯定非空啊,为什么不能按照count(*)来处理,多么简单的优化啊。
当然,mysql专门针对这个语句进行优化,也不是不可以。但是这种需要专门优化的情况太多了,而且mysql已经优化过count(*)了,直接使用这种用法就可以了。
所以结论是:按照效率排序的话,count(字段) < count(主键id) < count(1) ≈ count(*)
。所以建议尽量使用count(*)
。
抄袭来源:https://yuanrengu.com/2020/c00d182e.html#more
mysql性能优化------获取mysql的行数多少
标签:简单 没有 抄袭 nod 基于 tps 记录 取出 就是
本文系统来源:https://www.cnblogs.com/chaojibaidu/p/12764332.html
内容总结
以上是互联网集市为您收集整理的mysql性能优化------获取mysql的行数多少全部内容,希望文章能够帮你解决mysql性能优化------获取mysql的行数多少所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。