推荐链接:
总结——》【Java】
总结——》【Mysql】
总结——》【Spring】
总结——》【SpringBoot】
总结——》【MyBatis、MyBatis-Plus】
一、准备数据
CREATE TABLE `user` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` VARCHAR ( 10 ) NOT NULL COMMENT '姓名',
`age` INT DEFAULT '0' COMMENT '年龄',
PRIMARY KEY ( `id` ) USING BTREE
) ENGINE = INNODB AUTO_INCREMENT = 5;
INSERT INTO `xiaoxian`.`user` (`id`, `name`, `age`) VALUES (1, '赵', 1);
INSERT INTO `xiaoxian`.`user` (`id`, `name`, `age`) VALUES (2, '钱', 2);
INSERT INTO `xiaoxian`.`user` (`id`, `name`, `age`) VALUES (3, '孙', 2);
INSERT INTO `xiaoxian`.`user` (`id`, `name`, `age`) VALUES (4, '李', NULL);
二、count()介绍
函数 | 描述 | 备注 |
---|
COUNT(*) | 包含NULL和非NULL值的所有行数 | 包含所有列,把*自动优化指定到列名 |
COUNT(1) | 包含NULL和非NULL值的所有行数 | 忽略所有列,用1代表代码行 |
COUNT(column) | 不包含NULL值的所有行数 | 只包含列名 |
COUNT(DISTINCT column) | 不包含NULL值的唯一行数 | 只包含列名 |
COUNT(expression) | 不包含NULL值的行数 | 符合表达式 |
SELECT
count(*),
count( 1 ),
count( age ),
count( DISTINCT age ),
count( IF ( age > 1, 1, NULL ))
FROM
USER;
三、count()执行效率
场景 | 效率 |
---|
只有一列 | count(*) 最快 |
多列,列名为主键 | count(column) > count(1) |
多列,列名不为主键 | count(1) > count(column) |
多列,没有主键 | count(1) > count(*) |