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

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

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

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

相关文章

  • MySQL 启动报错:File ./mysql-bin.index not found (Errcode: 13)

    MySQL 启动报错:File ./mysql-bin.index not found (Errcode: 13)这个错误信息通常表示MySQL在启动时无法找到日志文件 “./mysql-bin.index”, 并且错误代码 Errcode: 13 表示操作被拒绝。下面我来为大家介绍详细的解决方案。 确认错误原因 在开始修复问题之前,我们需要确认错误原因。可…

    MySQL 2023年5月18日
    00
  • MYSQL中binlog优化的一些思考汇总

    MYSQL中binlog优化的一些思考汇总 在MYSQL的开发和维护过程中,我们通常会面临 binlog 日志过多导致性能下降的挑战。为了解决这个问题,本文将探讨一些优化 binlog 的思考过程和方法。 一、日志格式 在 MYSQL 中,我们可以通过设置不同的 binlog 日志格式以达到优化性能的目的。常用的日志格式包括 STATEMENT、ROW 和 …

    MySQL 2023年5月19日
    00
  • 解决Navicat Premium 连接 MySQL 8.0 报错”1251″的问题分析

    以下是解决Navicat Premium 连接 MySQL 8.0 报错”1251″的问题分析的完整攻略。 问题分析 当我们使用Navicat Premium连接MySQL 8.0时,可能会出现如下报错信息: 1251 – Client does not support authentication protocol requested by server.…

    MySQL 2023年5月18日
    00
  • MySQL中通过EXPLAIN如何分析SQL的执行计划详解

    MySQL中通过EXPLAIN命令可以查看SQL执行计划,从而优化SQL语句,并提高数据库系统的性能。下面就来详细讲解一下如何使用EXPLAIN分析SQL的执行计划。 什么是执行计划 执行计划是数据库系统解析SQL语句后,生成的一种数据结构,它表示了SQL语句的执行流程和相关信息,包括使用哪些索引、哪些表需要进行关联、如何执行聚合操作等等。 EXPLAIN命…

    MySQL 2023年5月19日
    00
  • mysql慢日志使用mysqldumpslow进行分析

    环境:centos7、mysql5.7、慢日志 1、mysqldumpslow参数解析 mysql> show variables like ‘%slow_query%’; #mysql日志路径 +———————+————————————–+ | Variable_name …

    MySQL 2023年4月13日
    00
  • 重装系统,新安装IDEA启动项目后,classnotfound:com.mysql.jdbc.Driver

    这个Test connection会自动帮你下载的,但是如果中途一直叫你try again,甚至到后面点这个test connection有弹窗,但是单窗里面的选项你点击后没反应,我是直接卸载IDEA重装了,(浪费一个下午弄这个问题),然后再来一次,就成功了。 我再说一下症状:我新装的IDEA,(重装系统),打开我以前的maven项目试着启动,报错找不到co…

    MySQL 2023年4月12日
    00
  • Windows10下mysql 8.0.19 安装配置方法图文教程

    接下来我将详细介绍”Windows10下mysql 8.0.19 安装配置方法图文教程”。 1. 下载mysql 8.0.19 首先,我们需要下载mysql 8.0.19的安装包,并解压到指定文件夹。这里我们选择下载mysql-8.0.19-winx64.zip,下载完成后解压到D盘根目录下的mysql8.0.19文件夹。 2. 配置my.ini文件 进入m…

    MySQL 2023年5月18日
    00
  • 第五部分(二) 数据存储(关系型数据库:MySQL存储方式)

    一 关系型数据库存储关系型数据库是基于关系模型的数据库,而关系模型是通过二维表来保存的,所以它的存储方式就是行列组成的表,每一列是一个字段,每一行是一条记录。表可以看作某个实体的集合,而实体之间存在联系,这就需要表与表之间的关联关系来体现,如主键外键的关联关系。多个表组成一个数据库,也就是关系型数据库。关系型数据库有多种,如SQLite、MySQL、Orac…

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