你还在认为 count(1) 比 count(*) 效率高?
你还在认为 count(1) 比 count(*) 效率高?
 3 很多人认为count(1)执行的效率会比count()高,原因是count()会存在全表扫描,而count(1)可以针对一个字段进行查询。其实不然,count(1)和count(*)都会对全表进行扫描,统计所有记录的条数,包括那些为null的记录,因此,它们的效率可以说是相差无几。而count(字段)则与前两者不同,它会统计该字段不为null的记录条数。
 4
 5 话不多说了,来一起看看详细的介绍吧。
 6
 7 1、count(1) and count()
 8 数据量大时
 9 当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count()用时多了!
10
11 从执行计划来看,count(1)和count(*)的效果是一样的。但是在表做过分析之后,count(1)会比count()的用时少些(1w以内数据量),不过差不了多少。
12
13 如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。
14
15 因为count(),自动会优化指定到那一个字段。所以没必要去count(1),用count(),sql会帮你完成优化的 因此:count(1)和count(*)基本没有差别!
16
17 2、count(1) and count(字段)
18 主要的区别
19 1、count(1) 会统计表中的所有的记录数,包含字段为null 的记录。
20
21 2、count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。
22
23 count() 和 count(1)和count(列名)区别
24 执行效果上
25 1、count()包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL
26
27 2、count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL
28
29 3、count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。
30
31 执行效率上
32 列名为主键,count(列名)会比count(1)快
33
34 列名不为主键,count(1)会比count(列名)快
35
36 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)
37
38 如果有主键,则 select count(主键)的执行效率是最优的
39
40 如果表只有一个字段,则 select count(*)最优
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', ''), ('a', ''),
-> ('b', NULL), ('b', ''),
-> ('c', '')
-> ('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 inset(0.00 sec)
mysql>select name, count(name), count(1), count(*), count(age), count(distinct(age))
->from counttest
-> groupby 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 inset(0.00 sec)
2020-08-21 11:21:06
你还在认为 count(1) 比 count(*) 效率高?的更多相关文章
- 高性能MySQL   count(1)与count(*)的差别
		-------------------------------------------------------------------------------------------------第一篇 ... 
- 【优化】COUNT(1)、COUNT(*)、COUNT(常量)、COUNT(主键)、COUNT(ROWID)、COUNT(非空列)、COUNT(允许为空列)、COUNT(DISTINCT 列名)
		[优化]COUNT(1).COUNT(*).COUNT(常量).COUNT(主键).COUNT(ROWID).COUNT(非空列).COUNT(允许为空列).COUNT(DISTINCT 列名) 1. ... 
- MySQL学习笔记:count(1)、count(*)、count(字段)的区别
		关于数据库中行数统计,无论是MySQL还是Oracle,都有一个函数可以使用,那就是COUNT. 但是,就是这个常用的COUNT函数,却暗藏着很多玄机,尤其是在面试的时候,一不小心就会被虐.不信的话请 ... 
- sql中count(1)和count(*)有区别吗
		count(*) 对 innodb 而言,它需要把数据从磁盘中读取出来然后累计计数:而 MyISAM 引擎把一个表的总行数存在了磁盘上,所以执行 count(*) 会直接返回这个数,如果有 where ... 
- count(1)比count(*)效率高?
		SELECT COUNT(*) FROM table_name是个再常见不过的统计需求了. 本文带你了解下Mysql的COUNT函数. 一.COUNT函数 关于COUNT函数,在MySQL官网中有详细 ... 
- COUNT(1)和COUNT(*)区别
		项目经常用到count(1),但是和count(*)什么区别? 从下面实验结果来看,Count (*)和Count(1)查询结果是一样的,都包括对NULL的统计,而count(列名) 是不包括NULL ... 
- Count(*)或者Count(1)或者Count([列]) 区别
		在SQL 中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合函数.很多人其实对这三者之间是区分不清的.本文会阐述这三者的作用,关系以及背后的原理. 往常我经常会看到一些所 ... 
- select count(*)和select count(1)
		一般情况下,Select Count (*)和Select Count(1)两着返回结果是一样的 假如表沒有主键(Primary key), 那么count(1)比count(*)快, 如果有主键的話 ... 
- Oracle 中count(1) 和count(*) 的区别
		count()与count(*)比较: 如果你的数据表没有主键,那么count()比count(*)快 如果有主键的话,那主键(联合主键)作为count的条件也比count(*)要快 如果你的表只有一 ... 
随机推荐
- Python3.7安装pyaudio库报错问题及修复
			本人今天在使用python编写语音相关项目是需要引用pyaudio库,结果发现引用失败,刚开始报错内容如下: 说让我升级pip,然后我就按照提示升级了pip,然后又再次尝试安装pyaudio库,然后还 ... 
- matplotlib 显示中文问题
			import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签plt.rcParams[' ... 
- 在Windows上安装MySQL(转整)
			MySQL安装 在Windows上安装MySQL.首先登录MySQL的官网下载安装包. 选择MySQL installer 这里选择第二个安装包下载即可. 下载完成之后就选择安装那个下载到的文件,基本 ... 
- Python 字典(Dictionary) items()方法
			描述 Python 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组.高佣联盟 www.cgewang.com 语法 items()方法语法: dict.it ... 
- EC R 86 D Multiple Testcases 构造 贪心 二分
			LINK:Multiple Testcases 得到很多种做法.其中O(n)的做法值得一提. 容易想到二分答案 check的时候发现不太清楚分配的策略. 需要先考虑如何分配 容易发现大的东西会对小的产 ... 
- 痞子衡嵌入式:为下一代智能可穿戴设备而生 - i.MXRT500
			大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的新品i.MXRT500. 自2018年i.MXRTxxx系列首款芯片i.MXRT600(主打智能语 ... 
- Docker管理工具之portainer
			参考:https://www.cnblogs.com/frankdeng/p/9686735.html 1. 查询portainer镜像 命令:docker search portainer 实例: ... 
- 《JavaScript语言入门教程》记录整理:运算符、语法和标准库
			目录 运算符 算数运算符 比较运算符 布尔运算符 二进制位运算符 void和逗号运算符 运算顺序 语法 数据类型的转换 错误处理机制 编程风格 console对象和控制台 标准库 Object对象 属 ... 
- Android ExpandListView的用法(补上昨天的)(今天自习)
			今天自习写ExpandListView的作业,昨天没写博客就是去写作业去了. 今天来说昨天内容吧! 其实ExpandListView和ListView的用法大同小异. 首先就是创建一个自己的适配器(现 ... 
- Android后台数据接口交互实现注册功能
			首先,在ecplise里面新建一个叫做TestServices的web工程.在WebContent--WEB-INF--libs文件夹下导入两个jar包:mysql-connector-java-6. ... 
