千家信息网

mysql中count()语句的用法介绍

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容主要讲解"mysql中count()语句的用法介绍",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"mysql中count()语句的用法介绍"吧!查看
千家信息网最后更新 2026年11月02日mysql中count()语句的用法介绍

本篇内容主要讲解"mysql中count()语句的用法介绍",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"mysql中count()语句的用法介绍"吧!

查看表结构:

mysql> show create table coupon_use_test \G*************************** 1. row ***************************       Table: coupon_use_testCreate Table: CREATE TABLE `coupon_use_test` (  `id` int(11) NOT NULL DEFAULT '0',  `user_id` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,  `coupon_code` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',  `status` varchar(2) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT '00',  `use_time` datetime DEFAULT NULL,  `remark1` varchar(200) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,  `remark2` varchar(200) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,  `remark3` varchar(200) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,  `create_time`  timestamp NULL DEFAULT CURRENT_TIMESTAMP,  `create_user_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  KEY `idx_create_time` (`create_time`)) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)

查看create_time字段为空的行数

mysql> select * from coupon_use_test where create_time is null;Empty set (0.00 sec)

把id为1的记录create_time改为空

mysql> update coupon_use_test set create_time = null where id = 1;Query OK, 1 row affected (6.56 sec)Rows matched: 1  Changed: 1  Warnings: 0mysql> select count(*) from coupon_use_test where create_time is null;+----------+| count(*) |+----------+|        1 |+----------+1 row in set (0.00 sec)

count(*)

mysql> select count(*) from coupon_use_test;+----------+| count(*) |+----------+|  1800000 |+----------+1 row in set (0.69 sec)mysql> explain select count(*) from coupon_use_test;+----+-------------+-----------------+------------+-------+---------------+-----------------+---------+------+---------+----------+-------------+| id | select_type | table           | partitions | type  | possible_keys | key             | key_len | ref  | rows    | filtered | Extra       |+----+-------------+-----------------+------------+-------+---------------+-----------------+---------+------+---------+----------+-------------+|  1 | SIMPLE      | coupon_use_test | NULL       | index | NULL          | idx_create_time | 5       | NULL | 1771323 |   100.00 | Using index |+----+-------------+-----------------+------------+-------+---------------+-----------------+---------+------+---------+----------+-------------+1 row in set, 1 warning (0.00 sec)

可以看到count(*)走了create_time字段的索引idx_create_time

count(1)

mysql> select count(1) from coupon_use_test;+----------+| count(1) |+----------+|  1800000 |+----------+1 row in set (0.63 sec)mysql> explain select count(1) from coupon_use_test;+----+-------------+-----------------+------------+-------+---------------+-----------------+---------+------+---------+----------+-------------+| id | select_type | table           | partitions | type  | possible_keys | key             | key_len | ref  | rows    | filtered | Extra       |+----+-------------+-----------------+------------+-------+---------------+-----------------+---------+------+---------+----------+-------------+|  1 | SIMPLE      | coupon_use_test | NULL       | index | NULL          | idx_create_time | 5       | NULL | 1771323 |   100.00 | Using index |+----+-------------+-----------------+------------+-------+---------------+-----------------+---------+------+---------+----------+-------------+1 row in set, 1 warning (0.00 sec)

count(create_time)

mysql> select count(create_time) from coupon_use_test;+--------------------+| count(create_time) |+--------------------+|            1799999 |+--------------------+1 row in set (0.73 sec)mysql> explain select count(create_time) from coupon_use_test;+----+-------------+-----------------+------------+-------+---------------+-----------------+---------+------+---------+----------+-------------+| id | select_type | table           | partitions | type  | possible_keys | key             | key_len | ref  | rows    | filtered | Extra       |+----+-------------+-----------------+------------+-------+---------------+-----------------+---------+------+---------+----------+-------------+|  1 | SIMPLE      | coupon_use_test | NULL       | index | NULL          | idx_create_time | 5       | NULL | 1771323 |   100.00 | Using index |+----+-------------+-----------------+------------+-------+---------------+-----------------+---------+------+---------+----------+-------------+1 row in set, 1 warning (0.00 sec)

count(*)和count(1)可以查询全表总行数,count(create_time)查询到的行数不包括null。

count(1) 与 count(*) 比较 :

1> 如果数据表没有主键,那么 count(1) 比 count(*) 快

2> 如果有主键的话,那主键 (联合主键) 作为 count条件也比 count(*) 要快

3> 如果你的表只有一个字段的话那 count(*) 就是最快

在不加 WHERE 限制条件的情况下,COUNT(*) 与 COUNT(COL) 基本可以认为是等价的,但是在有 WHERE 限制条件的情况下,COUNT(*) 会比 COUNT(COL) 快非常多

COUNT(*) 通常是对主键进行索引扫描,而COUNT(COL)就不一定了,另外前者是统计表中的所有符合的纪录总数,而后者是计算表中所有符合的COL的纪录数

count(*) 与 count(1) 两者比较,主要还是要取决于 count(1) 所相对应的数据字段,如果count(1)是聚索引 id 那肯定是count(1)快,但是差的很小,因为 count(*) 自动会优化指定到那一个字段,所以没必要去count(?)用count(*)sql会自动完成优化

1> 任何情况下 SELECT COUNT(*) FROM tablename 是最优选择

2> 尽量减少 SELECT COUNT(*) FROM tablename WHERE COL = 'value' 这种查询

3> 杜绝 SELECT COUNT(COL) FROM tablename 的出现

到此,相信大家对"mysql中count()语句的用法介绍"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

字段 查询 语句 情况 条件 索引 内容 数据 纪录 学习 限制 实用 更深 最快 必要 兴趣 取决于 只有 实用性 实际 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 喔噻互联网科技有限公司 网络科技有限互联网 互联网医疗科技 有马互联网科技 互联网科技论文 宜安科技 互联网金融 碳银互联网科技有限公司 金融科技和互联网金融 成都仁贤领冠互联网科技有限公司 剑昆互联网络科技有限公司临桂 北京华百购互联网科技有限公司 青岛科技大学互联网大赛研究生 四川慕妮娅互联网科技有限公司 滨湖区互联网智能科技产品有哪些 沐思想互联网科技有限公司 梅州GM互联网络科技有限公司 互联网风格科技公司名称 科技互联网行业投资研究 北京天晋互联网科技有限公司 科技美学互联网 艺术 伟宏互联网科技 广州紫鲸互联网科技有限公司 互联网科技宣传片 上海宁丞科技互联网 世界互联网科技公司市值排名 武汉健翔互联网络科技有限公司 国大互联网教育科技有限公司薪资 怎样加入科技互联网 版纳互联网科技选哪家 悟空问答互联网科技
0