详解聚合函数count() 您所在的位置:网站首页 mysql聚合函数的使用 详解聚合函数count()

详解聚合函数count()

2024-07-13 19:08| 来源: 网络整理| 查看: 265

语法 COUNT(expr)

返回 select 语句检索到的行中非NULL值的数目。若找不到匹配的行,则 COUNT(expr) 返回0。

mysql> select * from users; +----+------+----------+ | id | name | password | +----+------+----------+ | 1 | yhq | a1 | | 2 | qhh | NULL | +----+------+----------+ 2 rows in set mysql> select count(name) from users; +-------------+ | count(name) | +-------------+ | 2 | +-------------+ 1 row in set mysql> select count(password ) from users; +-----------------+ | count(password) | +-----------------+ | 1 | +-----------------+ 1 row in set COUNT(*)

返回检索行的数目, 不论其是否包含 NULL 值。

mysql> select * from users; +----+------+----------+ | id | name | password | +----+------+----------+ | 1 | yhq | a1 | | 2 | qhh | NULL | +----+------+----------+ 2 rows in set mysql> select count(* ) from users; +----------+ | count(*) | +----------+ | 2 | +----------+ 1 row in set COUNT(DISTINCT expr,[expr…])

返回不同的非NULL值数目。若找不到匹配的项,则 COUNT(DISTINCT)返回0。

mysql> select * from users; +----+------+----------+ | id | name | password | +----+------+----------+ | 1 | yhq | a1 | | 9 | test | a2 | | 8 | yqy | NULL | | 2 | qhh | a1 | +----+------+----------+ 4 rows in set mysql> select count(distinct(password)) from users; +---------------------------+ | count(distinct(password)) | +---------------------------+ | 2 | +---------------------------+ 1 row in set 不同的 count 用法(基于 InnoDB 引擎) count(主键 id)

InnoDB 引擎会遍历整张表,把每一行的 id 值都取出来,返回给 server 层。server 层拿到 id 后,判断是不可能为空的,就按行累加。

count(1)

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

单看这两个用法的差别的话,你能对比出来,count(1)执行得要比 count(主键 id)快。因为从引擎返回 id 会涉及到解析数据行,以及拷贝字段值的操作。

count(字段)

如果这个字段是定义为not null的话,一行行地从记录里面读出这个字段,判断不能为null,按行累加;

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

count(*)

并不会把全部字段取出来,而是专门做了优化,不取值。count(*)肯定不是 null,按行累加。

按照效率排序的话,count(字段)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有