mysql——count(*)、count(1)和count(字段)谁更快?有什么区别?

目录

一、count(*)、count(1)和count(属性)谁更快?有什么区别?

1.1、示例

  • 例如表结构及数据如下图:

  • 分别执行如下3条sql语句

    java 复制代码
    SELECT count(*) FROM t_user;
    SELECT count(1) FROM t_user;
    SELECT count(names) FROM t_user;

1.2、count(*)、count(1)和count(属性)区别

1.2.1、语义区别‌
  • count(*) 返回3条数据

    说明统计 满足条件的结果集的总行数,包括所有行(无论是否包含NULL值

  • count(1) 返回3条数据

    说明与count(*)功能相同,统计所有行数

  • count(names) 返回2条数据

    说明统计该字段非NULL的行数(若字段允许NULL,则仅统计非NULL值)

1.2.2、count(*)和count(1)在功能和性能上区别
  • mysql官网上表示count(*)和count(1)在功能和性能上没有任何区别,下图为官网截图:

  • 通过explian执行计划查看,如下图:

    java 复制代码
    explain SELECT count(*) FROM `t_user`;
    show WARNINGS;
  • 可以看到mysql底层对这个查询进行了sql优化,把 count(*) 优化成了count(0),其中count(0)和count(1)是没有任何区别的,只是为了标记当前这条数据存在的一个常量,所以优化完之后的这个**count(*)**跟count(1)肯定是没有任何性能上的区别。

  • 如果非要进行比较的话,肯定还是 **count(*)**比count(1)略胜一筹,因为它不需要mysql在底层进行任何的sql优化。

相关推荐
shejizuopin1 小时前
基于SSM的高校旧书交易系统的设计与实现(任务书)
java·mysql·毕业设计·论文·任务书·基于ssm的·高校旧书交易系统的设计与实现
Wiktok1 小时前
SQLAlchemy+PyMySQL的实用实战示例
python·mysql·sqlalchemy
不想写bug呀1 小时前
MySQL事务介绍
数据库·mysql
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.2 小时前
双主模式实现HTTP与MySQL高可用
网络协议·mysql·http
cheems95272 小时前
【MySQL】SQL调优:数据库性能优化(一)
数据库·sql·mysql
qq_297574672 小时前
MySQL迁移到瀚高数据库 常用转换函数对照表(附XML示例,直接复用)
xml·数据库·mysql
Mr_Xuhhh2 小时前
MySQL复合查询详解:多表查询、子查询与合并查询
数据库·sql·mysql
Big Cole3 小时前
PHP 面试:MySQL 核心问题之索引与优化
mysql·面试·php
予枫的编程笔记3 小时前
【MySQL修炼篇】从S锁/X锁到Next-Key Lock:MySQL锁机制硬核拆解
mysql·锁机制·行锁·间隙锁·数据库运维·数据库性能优化·死锁排查
Mr_Xuhhh5 小时前
MySQL核心知识梳理:从连接到查询的完整指南
数据库·sql·mysql