这篇文章主要介绍“Mysql中count(*)、count(1)、count(主键id)与count(字段)的区别是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Mysql中count(*)、count(1)、count(主键id)与count(字段)的区别是什么”文章能帮助大家解决问题。count() 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是 NULL,累计值就加 1,否则不加。最后返回累计值。count(*)、count(1) 和 count(主键id) 都表示返回满足条件的结果集的总行数;而count(字段)则表示返回满足条件的数据行里面,参数“字段”不为 NULL 的总个数。对于 count(主键id) 来说,InnoDB 引擎会遍历整张表,把每一行的 id 值都取出来,返回给 server 层。server 层拿到 id 后,判断 id 不为 NULL 的,就按行累加对于 count(1) 来说,InnoDB 引擎遍历整张表,但不取值。server 层对于返回的每一行,放一个数字 “1” 进去,判断是不可能为空的,按行累加总的来说, count(1) 执行得要比 count(主键id) 快一些。因为从引擎返回 id 会涉及到解析数据行,以及拷贝字段值的操作如果这个 “字段” 定义为 not null,一行行地从记录里面读出这个字段,判断不可能为 null,按行累加。注意:count(非空字段)与count(主键id) 的效率是一样的如果这个 “字段” 定义为 可为null,那么执行的时候,判断到有可能是 null,还要把值取出来再判断一下,不是 null 才免费云主机域名累加count(*) 是例外,优化器专门对其做了优化,并不会把全部字段取出来,而是直接按行累加。按照效率排序,count(可空字段)
count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL。count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL 。count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。列名为主键,count(列名)会比count(1)快。列名不为主键,count(1)会比count(列名)快。如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)。如果有主键,则 select count(主键)的执行效率是最优的。如果表只有一个字段,则 select count(*)最优。关于“Mysql中count(*)、count(1)、count(主键id)与count(字段)的区别是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注百云主机行业资讯频道,小编每天都会为大家更新不同的知识点。
这篇文章主要讲解了“Flask Vue前后端分离实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Flask Vue前后端分离实例分析”吧!vue官网:开源的 Javascript 框架,vue是一套构建用…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。