您正在使用IPV4(35.168.110.128)访问本站 您本次共访问本站 1 次
 用户名: 密 码: 验证码:     用QQ登录本站
首页 软件 编程 笑话 知识 公告 台风 日历 计算器
[公益]文明驾车我带头,文明行路我带头,礼貌让座我带头      

【腾讯云】多款云产品1折起,买云服务器送免费机器,最长免费续3个月      
[公益] 节省一分零钱 献出一份爱心 温暖世间真情      
2022年 中秋节 21
2022年 国庆节 42
2023年 元 旦 134
2023年 春 节 155
 
本类新增
本类热门文章
您现在的位置:首页 >> 数据库 >> 内容
Mysql中count(*)、count(1)、count(主键id)与count(字段)的区别
内容摘要: count()函数count()是一个聚合函数,对于返回的结果集,一行行地判断,如果count函数的参数不是NULL,累计值就加1,否则不加。最后返回累计值。count(*)、count(1)、count(主键id)和count(字段)区别count(*)、count(1)和count(主键id)都表示返回满足条件的结果集的总行数;而count(字段)则表示......
count()函数

count()是一个聚合函数,对于返回的结果集,一行行地判断,如果count函数的参数不是NULL,累计值就加1,否则不加。最后返回累计值。

count(*)、count(1)、count(主键id)和count(字段)区别

count(*)、count(1)和count(主键id)都表示返回满足条件的结果集的总行数;而count(字段)则表示返回满足条件的数据行里面,参数“字段”不为NULL的总个数。

count(主键id)与count(1)

对于count(主键id)来说,InnoDB引擎会遍历整张表,把每一行的id值都取出来,返回给server层。server层拿到id后,判断id不为NULL的,就按行累加

对于count(1)来说,InnoDB引擎遍历整张表,但不取值。server层对于返回的每一行,放一个数字“1”进去,判断是不可能为空的,按行累加

总的来说,count(1)执行得要比count(主键id)快一些。因为从引擎返回id会涉及到解析数据行,以及拷贝字段值的操作

count(字段)

count(非空字段)

如果这个“字段”定义为notnull,一行行地从记录里面读出这个字段,判断不可能为null,按行累加。

注意:count(非空字段)与count(主键id)的效率是一样的

count(可空字段)

如果这个“字段”定义为可为null,那么执行的时候,判断到有可能是null,还要把值取出来再判断一下,不是null才累加

count(*)

count(*)是例外,优化器专门对其做了优化,并不会把全部字段取出来,而是直接按行累加。

执行效率

按照效率排序,count(可空字段)<count(非空字段)=count(主键id)<count(1)≈count(*),所以尽量使用count(*)就行了

执行效果上:

count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL。

count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL。

count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。

执行效率上:

列名为主键,count(列名)会比count(1)快。

列名不为主键,count(1)会比count(列名)快。

如果表多个列并且没有主键,则count(1)的执行效率优于count(*)。

如果有主键,则selectcount(主键)的执行效率是最优的。

如果表只有一个字段,则selectcount(*)最优。

上一篇:PHP连接MySql数据库方法简化版 下一篇:mysql时间字段默认设置为当前时间实例
发布日期:2022/7/29
手机扫二维码直达本页
发布时间:14:49:02
点击:130
录入:齐天大圣
相关文章
Baidu

YiJiaCMS 6.3.1.220701(MSSQL) 闽ICP备05000814号-1
本空间由腾讯云(轻量应用服务器)提供,百度云加速提供加速防护
Copyright©2000-2022