Mysql中count(*)、count(1)、count(主键id)与count(字段)的区别是什么
这篇文章计算主要介绍“Mysql中count(*)、count(1)、count(主键id)与count(字段数值)的区别是什么”的相关知识,Mysql中count(*)、count(1)、count(主键id)与count(字段)的区别是什么,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Mysql中count(*)、count(1)、count(主键id)与count(字段)的区别是什么”文章能帮助大家解决问题。
count()函数
count() 是一个聚合函数,对于返回的显示字段结果集,一行行地sum判断统计,如果 count 函数的参数不是 NULL,累计值就加 1,否则区别不加。最后返回累计值。
count(*)、count(1) 、count(主键id) 和 count(字段) 区别区别
count(*)、count(1) 和能不能字段Mysql count(主键id) 都表示count1返回满足条件的结果集能不能的总行数;而count(字段)则表示返回满足条件的数据行里面,mysql中count(1),参数“字段”不为 NULL 的总个数不显。
count(主键id) 与中会 count(1)
对于 count(主键id) 来说,InnoDB 引擎会排序遍历整张表,mysql中count函数能不能统计数值,把每一行的 id 值都取出来,返回给 server 层。server 层拿到 id 后,判断 id 不为 NULL 的,就按行累加
对于 count(1) 来说,InnoDB 引擎遍历重复整张表,但不取值。server 层对于返回分组的每一行,放一个数字 “1” 进去,判断是count不可能为空的,按行累加count1
总的来说, count(1) 执行分组查询字段得用法要比 count(主键id) 快一些。因为从null引擎返回 id 会涉及到解析数据行,以及主键拷贝字段值的操作
count(字段)
count(非空字段)
如果这个 “字段” 定义为 not null,一行行地从记录里面读出这个字段,mysql中count是什么,判断不可能为 null,按行累加,mysql中count()中会计算重复的吗。
注意分组:count(非空字段字段)与是统计什么count(主键id) 的效率是一样的
count(可空字段)
如果这个中会用法 “字段” 定义为函数 可为null,那么执行的时候,判断到有可能是 null,还显示要把值取出来再判断一下,不是 null 才累加统计数
count(*)
count(*) 是例外数值,mysql函数count,优化器区别专门null对其做了优化,并不会把全部字段统计数取出来,而是直接按行累加中。
执行效率
按照效率count排序,count(可空字段) < count(非空字段) = count(主键mysqlid)< count(1) ≈ count(*),mysql中count函数与排序分组结合,所以尽量使用写 count(*) 就行了
执行效果上:
count(*)包括了用法所有的列能不能,相当于行数,mysql中count和sum的区别,在统计数是什么统计计算b结果写的时候,不会sum忽略列值为NULL。
count(1)包括了忽略所有列统计数,用1代表代码行,在统计结果的时候,mysql中count函数中可以有null吗,不会忽略列值为NULL 。
count(列名)只包括列名那一列,在统计结果的Mysql时候,会忽略count列值为空(这里的空不id是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计,mysql中count(*) 于count(id)区别,mysql中count还可以怎么写。
执行效率上:
列名为主不显键,count(列名)会比count(1)快函数。
列名不为主count1键主键,count(1)会比count(列名)快。
如果表多个列并且没有主键,mysql中count查询,mysql中count1和count*的区别,则 count(1) 的执行效率优于mysqlcount count(*)。
如果有主还可以b键mysqlcount,则 select count(主键)的执行效率是最优的。
如果写表只有一个字段,则 select count(*)最优sum。
实例分析
mysql> create table counttest(name char(1), age char(2)); Query OK, 0 rows affected (0.03 sec) mysql> insert into counttest values -a> ('a', '14'),('a', '15'), ('a', '15'), -> ('b', NULL), ('b',mysql中count(*)和count(1)的区别, '16'), -> ('c', '17'), -> ('d', null), ->('e', ''); Query OK, 8 rows affected (0.01 sec) Records: 8 Duplicates: 0 Warnings: 0 mysql> select * from counttest; +------+------+ | name | age | +------+------+ | a | 14 | | a | 15 | | a | 15 | | b | NULL | | b | 16 | | c | 17 | | d | NULL | | e | | +------+------+ 8 rows in set (0.00 sec) mysql> select name, count(name), count(1), count(*),mysql中count(*)什么意思, count(age), count(distinct(age)) -> from counttest -> group by name; +------+-------------+----------+----------+------------+----------------------+查询 | name | count(name) | count(1) | count(*) | count(age) | count(distinct(age)) | +------+-------------+----------+----------+------------+----------------------+ | a | 3 | 3 | 3 | 3 | 2 | | b | 2 | 2 | 2 | 1 | 1 | | c | 1 | 1 | 1 | 1 | 1 | | d | 1 | 1 | 1 | 0 | 0 | | e | 1 | 1 | 1 | 1 | 1 | +------+-------------+----------+----------+------------+----------------------+ 5 rows in set (0.00 sec)
关于“Mysql中mysqlcount(*)、count(1)、count(主键id)与count(字段)的区别是什么”的内容就介绍到这里了重复,感谢大家的阅读。如果sum想了解更多null行业相关的知识,可以中关注蜗牛博客统计行业资讯频道,小编每天还可以都会为大家更新不同的知识点。
免责声明:本站发布的内容(图片id、视频和a文字)以原创、转载和分享为主中,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关查询证据,一经查实,将立刻删除涉嫌侵权内容。
评论