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优化。

相关推荐
Hx__32 分钟前
MySQL InnoDB 的锁机制
数据库·mysql
理智的煎蛋6 小时前
MySQL高可用架构:MHA
linux·数据库·mysql·架构·可用性测试
KING BOB!!!9 小时前
Leetcode高频 SQL 50 题(基础版)题目记录
sql·mysql·算法·leetcode
NineData13 小时前
NineData发布 Oracle 到 MySQL 双向实时复制,助力去 O 战略与数据回流
mysql·阿里云·oracle·ninedata·数据库迁移·数据复制·双向复制
皆过客,揽星河14 小时前
mysql初学者练习题(从基础到进阶,相关数据sql脚本在最后)
数据库·sql·mysql·oracle·mysql基础练习·mysql基础语法·数据库练习题
AI小小怪15 小时前
在linux下使用MySQL常用的命令集合
linux·数据库·mysql·oracle
XYiFfang18 小时前
【mysql】SQL自连接实战:查询温度升高的日期
数据库·sql·mysql
四季豆豆豆1 天前
办公任务分发项目 laravel vue mysql 第一章:核心功能构建 API
vue.js·mysql·laravel
一个CCD1 天前
MySQL主从复制之进阶延时同步、GTID复制、半同步复制完整实验流程
android·mysql·adb
R瑾安1 天前
mysql集群部署(Mysql Group Replication)
数据库·mysql·wpf