count(列名)、count(1)和 count(*)有什么区别?
在MySQL中,这几个都是统计操作,很多人在使用的时候,都使用的是count(1),这有没有问题?使用正确?达到了统计效果?
我们从效果和效率两方面来分析下
执行效果
count(*) 包括了所有的列,在统计时不会忽略列值为null的数据
count(1) 用1表示代码行,在统计时不会忽略列值为null的数据
count(列名)在统计时,会忽略列值为空的数据,就是说某个字段的值为null时不统计
简单来说,count(*) 和count(1) 都统计null列,count(列名)不统计null列
执行效率
1、InnoDB引擎
count(字段) < count(1) = count(*)
InnoDB通过遍历最小的可用二级索引来处理select count(*) 语句,除非索引或优化器提示指示优化器使用不同的索引如果二级索引不存在,则通过扫描聚簇索引来处理
2、MyISAM引擎
count(字段) < count(1) <= count(*)
- MyISAM存储了数据的准确行数,使用
count(*)会直接读取该行数 - 当第一列定义为NOT NULL时,count(1)和count(*)一样
- count(列名) 会遍历整个表,但不同的是,它会先获取列,然后判断是否为空,然后累加,因此count(列名)性能不如前两者
总结
- 优先使用count(*),这是SQL92 定义的标准统计行数的语法,跟数据库无关,与NULL也无关
- 在InnoDB中,count(1) 等同于count(*),统计NULL的话,使用谁都OK
- count(列名) 是统计列值数量,不计NULL,相同列值算一个
count(列名)、count(1)和 count(*)有什么区别?的更多相关文章
- 用count(*)还是count(列名) || Mysql中的count()与sum()区别
Mysql中的count()与sum()区别 首先创建个表说明问题 CREATE TABLE `result` ( `name` varchar(20) default NULL, `su ...
- COUNT(*)与COUNT(列名)的区别(转)
COUNT(*)与COUNT(列名)的区别 以前一直没有留意到COUNT(*)与COUNT(列名)的区别,昨天晚上无意中看到数据库系统工程师教程里面的一句话."如果null参与聚 ...
- 关于数据库优化1——关于count(1),count(*),和count(列名)的区别,和关于表中字段顺序的问题
1.关于count(1),count(*),和count(列名)的区别 相信大家总是在工作中,或者是学习中对于count()的到底怎么用更快.一直有很大的疑问,有的人说count(*)更快,也有的人说 ...
- sqlserver count(1),count(*),count(列名) 详解
sqlserver数据库 count(1),count(*),count(列名) 的执行区别 count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL count(1)包括 ...
- count(*)、count(1)和count(列名)的区别
count(*).count(1)和count(列名)的区别 1.执行效果上: l count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL l count(1)包 ...
- count(1)、count(*)与count(列名)的执行区别
执行效果: 1. count(1) and count(*) 当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了! 从执行计划来看,count(1)和coun ...
- 【转载】Oracle 中count(1) 、count(*) 和count(列名) 函数的区别
1)count(1)与count(*)比较: 1.如果你的数据表没有主键,那么count(1)比count(*)快2.如果有主键的话,那主键(联合主键)作为count的条件也比count(*)要快3. ...
- count(*) 和 count(1)和count(列名)区别
执行效果上: count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL count(1)包括了所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL cou ...
- Oracle 中count(1) 、count(*) 和count(列名) 函数的区别
1)count(1)与count(*)比较: 1.如果你的数据表没有主键,那么count(1)比count(*)快2.如果有主键的话,那主键(联合主键)作为count的条件也比count(*)要快3. ...
- 浅谈count(*)、count(1)、count(列名)
count(*) 和 count(1)和count(列名)区别 执行效果上: count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL count(1)包括了所有列, ...
随机推荐
- 使用Navicat查询后 , 在结果处更改数据
参考资料: https://blog.csdn.net/weixin_43786801/article/details/125364995 问题: 在使用Navicat查询是,往往想直接对查询结果进行 ...
- Nginx自带的变量
$args #请求中的参数值$query_string #同 $args$arg_NAME #GET请求中NAME的值$is_args #如果请求中有参数,值为"?",否则为空字符 ...
- word多级标题自动编号设置
1.选择段落 ->多级列表 ->定义新的多级列表 2.级别设置 ,这里操作比较繁琐,要多注意[输入编号的格式]要通过[包含的级别编号来自]这一项目来设定 标题1: 标题2 标题3: 标题4 ...
- 操作kubernets(k8s)的增删改查
资源的CRUD: 创建: Service service = client.services().inNamespace(namespace).create(service); 更新: Namespa ...
- final修饰的作用
在Java中,final关键字可以用来修饰类.方法和变量(包括成员变量和局部变量) 1.final修饰类 当用final修饰一个类时,表明这个类不能被继承. final类中的成员变量可以根据需要设为f ...
- Tomcat相关环境的配置
Tomcat相关环境的配置 步骤: 1.首先需要了解的是: 在安装Tomcat之前,需要完成JDK的下载以及相关环境的配置,详情可以移步本人的上一篇博客,链接:https://www.cnblogs. ...
- Qt开发技术:Q3D图表开发笔记(一):Q3DScatter三维散点图介绍、Demo以及代码详解
前言 qt提供了q3d进行三维开发,虽然这个框架没有得到大量运用也不是那么成功,性能上也有很大的欠缺,但是普通的点到为止的应用展示还是可以的. 其中就包括华丽绚烂的三维图表,数据量不大的时候是可 ...
- MGF multivariate generating function 多变量生成函数
目录 MGF多变量生成函数multivariate generating function 定义 例子 Extremal parameters III.8.1 largest components 例 ...
- protobuf 详解
protobuf protobuf概述 protobuf简介 Protobuf是Protocol Buffers的简称,它是Google公司开发的一种数据描述语言,是一种轻便高效的结构化数据存储格式, ...
- uni-app云开发入门
云函数 首先创建一个uniapp项目,创建项目时选择启用uniCloud云开发. 创建项目成功后,按照下面的步骤进行开发. 创建云函数 1.关联云服务器 2.创建云函数 一个云函数可以看成是一个后 ...