Count(1) Count(0) Count(*) Count(列名)

简介: Count(1) Count(0) Count(*) Count(列名)

(1) count(0) count(*) 三者查询效率没有明显差别,

1. count(1) and count(*)

当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了!

从执行计划来看,count(1)和count()的效果是一样的。 但是在表做过分析之后,count(1)会比count()的用时少些(1w以内数据量),不过差不了多少。

如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。

因为count(∗ *)自动会优化指定到那一个字段。所以没必要去count(1),用count(∗ *),sql会帮你完成优化的 因此: count(1)和count(*)基本没有差别!

2. count(1) and count(字段)

两者的主要区别是

(1) count(1) 会统计表中的所有的记录数, 包含字段为null 的记录。

(2) count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即 不统计字段为null 的记录。

这里是一个简单的这次测试的脚本

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for test
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `age` int(0) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES (1, 'zhangsan', NULL);
INSERT INTO `test` VALUES (2, '', 23);
INSERT INTO `test` VALUES (3, 'tom', 25);
INSERT INTO `test` VALUES (4, 'q', 23);
SET FOREIGN_KEY_CHECKS = 1;

这个是这个表呈现的样子。

SELECT COUNT(age) FROM test t;

可以看到count列名,只有3列,除去了第一列age为空的那一列

SELECT COUNT(0) FROM test t;
SELECT COUNT(1) FROM test t;
SELECT COUNT(*) FROM test t;

这三条查询都是返回的结果4

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

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

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

执行效率上:

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

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

如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(
如果有主键,则 select count(主键)的执行效率是最优的
如果表只有一个字段,则 select count(
)最优。


相关文章
|
8月前
|
存储 SQL 关系型数据库
count(1)、count(具体字段)和count(*)究竟有什么区别?
count(1)、count(具体字段)和count(*)究竟有什么区别?
81 0
|
9月前
|
SQL Serverless 数据库
【count(列名)、count(1)和 count(星号)有什么区别】
【count(列名)、count(1)和 count(星号)有什么区别】
111 0
|
11月前
|
数据库 OceanBase
LIMIT_ROW_COUNT
LIMIT_ROW_COUNT
59 1
|
11月前
|
SQL 数据可视化 关系型数据库
count(列名) ,count(1)与count(*) 有何区别?
count(列名) ,count(1)与count(*) 有何区别?
|
存储 SQL 架构师
性能大PK count(*)、count(1)和count(列)
最近的工作中,我听到组内两名研发同学在交流数据统计性能的时候,聊到了以下内容: 数据统计你怎么能用 count(*) 统计数据呢,count(*) 太慢了,要是把数据库搞垮了那不就完了么,赶紧改用 count(1),这样比较快...... 有点儿好奇,难道 count(1) 的性能真的就比 count(*) 要好吗? 印象中网上有很多的文章都有过类似问题的讨论,那 MySQL 统计数据总数 count(*) 、count(1)和count(列名) 哪个性能更优呢?今天我们就来聊一聊这个问题。
性能大PK count(*)、count(1)和count(列)
|
SQL 关系型数据库 MySQL
|
存储 SQL 缓存
count(*)那么慢能用吗,该怎么办呢?
大家好前面我们大概了解了为什么delete from表名,表的大小还是没有变小!以及数据删除流程,数据页空洞,online和inplace。重建表的两种实现方式。今天介绍一下为什么count(*)那么慢。
count(*)那么慢能用吗,该怎么办呢?
|
缓存 关系型数据库 MySQL
count(列名)、 count(常量)、 count(*)区别
count(列名)、 count(常量)、 count(*)区别
count(列名)、 count(常量)、 count(*)区别
|
索引
select count(*)和select count(1)的区别
一般情况下,Select Count (*)和Select Count(1)两着返回结果是一样的     假如表沒有主键(Primary key), 那么count(1)比count(*)快,     如果有主键的話,那主键作为count的条件时候count(主键)最快     如果你的表...
965 0