count(列名)、count(1)和 count(*)有什么区别?

yizhihongxing

在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,相同列值算一个
 

原文链接:https://www.cnblogs.com/huozhonghun/p/17375372.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:count(列名)、count(1)和 count(*)有什么区别? - Python技术站

(0)
上一篇 2023年5月6日
下一篇 2023年5月6日

相关文章

  • 解决MySQL数据库链接超时报1129错误问题

    接下来我将详细讲解“解决MySQL数据库链接超时报1129错误问题”的完整攻略,过程中会示范两条具体的解决方案。 解决MySQL数据库链接超时报1129错误问题的完整攻略 问题描述 在使用MySQL数据库时,经常会遇到如下错误信息: ERROR 1129 (HY000): Host ‘xxx.xxx.xxx.xxx’ is blocked because o…

    MySQL 2023年5月18日
    00
  • mysql 5.7.14 安装配置简单教程

    MySQL 5.7.14 安装配置简单教程 MySQL 是一种常用的关系型数据库管理系统,安装配置十分重要。下面是 MySQL 5.7.14 的安装配置教程。 步骤一:下载安装包 从 MySQL 官网 下载 MySQL 5.7.14 安装包,并将其解压缩到指定目录。 步骤二:配置 MySQL 1. 修改配置文件 启动 MySQL 之前,需要修改 MySQL …

    MySQL 2023年5月18日
    00
  • demo项目开发(Python+flask+mysql+redis只包含后端接口)

    【demo项目开发需求】 用户信息管理,可以注册、登录、添加用户、删除用户 注册:任何用户可以注册,对用户提交的注册信息进行校验,返回对应的信息,其中:   用户名:必填,唯一   密码:必填,只能6-12位,入库是加盐加密   真实名:必填   性别:非必填,只能0(male)或者1(female)   电话:必填,唯一,满足电话要求,数字,且11位 登录…

    MySQL 2023年4月12日
    00
  • 配置ogg异构mysql-oracle 单向同步

    从mysql到oracle和oracle到mysql差不多。大致步骤如下: 环境是:192.168.0.165 (Mysql ) —> 192.168.0.164 ( Oracle )想将mysql的sure库下的ah6 同步到 oracle的 hr.ah6下 版本:操作系统:redhat5.8Oracle: 11.2.0.3Mysql: 5.5.37…

    MySQL 2023年4月12日
    00
  • windows无法启动MySQL服务报错1067的解决方法

    下面我来详细讲解“windows无法启动MySQL服务报错1067的解决方法”的完整攻略。 问题描述 在Windows操作系统中,有时候我们使用MySQL服务时会遇到无法启动MySQL服务的问题,并且在Windows系统日志中会出现“错误1067:进程意外终止”的提示信息。这种情况下,我们需要对MySQL服务进行重新配置,以解决该问题。 解决方法 方法一:检…

    MySQL 2023年5月18日
    00
  • MySQL二进制日志(Binary Log)详解

    MySQL二进制日志(Binary Log)是MySQL数据库记录的一种日志,用于记录对数据库进行修改的所有操作,如数据的更新、插入、删除等,以及对数据库的结构操作,如表的创建、删除等。该日志以二进制的形式存储,是一种非常高效的记录方式。 二进制日志的作用 数据恢复:MySQL数据库在运行过程中可能会遇到一些故障,例如数据库崩溃、停电等,此时可能会丢失部分数…

    MySQL 2023年3月10日
    00
  • 解决MySQL8.0安装第一次登陆修改密码时出现的问题

    针对MySQL 8.0安装第一次登录修改密码时出现的问题,我为您提供以下完整攻略: 问题描述 在MySQL 8.0进行第一次登录并修改密码时,可能会出现因密码安全等级问题而不能更新密码的情况。具体的错误信息为:Your password does not satisfy the current policy requirements。 解决方案 1. 临时修…

    MySQL 2023年5月18日
    00
  • 详解MySQL算术运算符

    MySQL中的算术运算符包括加(+)、减(-)、乘(*)、除(/)、取模(%)等。下面分别介绍它们的使用方法并提供实例说明。 加法运算符(+) 加法运算符用于两个数值类型的数据相加,也可以用于字符串类型的数据拼接。 实例: SELECT 2+2; — 输出4 SELECT 'Hello'+' World'; — 输…

    MySQL 2023年3月9日
    00
合作推广
合作推广
分享本页
返回顶部