reference1
reference2

  1. count(1),表示扫描表,count(1)它在扫描到一行时不会取任何值,而是直接返回一个1,然后累加1的个数。
  2. count(),MyISAM引擎中直接在磁盘存了表的总行数,因此执行count()的时候直接返回总行数;InnoDB引擎中没有直接存表的总行数,因为执行count()的时候需要把数据一行一行地从引擎里读出来,然后累积计数,但是mysql对count()做了优化。官方文档说过,count(1)和count(*),MySQL的优化是完全一样的,根本不存在谁更快。
  3. count(id),取出每一行数据把id值返回给server层,因为id不可能为null,因此直接累加。
  4. count(字段),对于可以为null的字段取出后还需要判断,因此会慢。

对于count(主键id)来说,InnoDB引擎会遍历整张表,把每一行的id值都取出来,返回给server层。server层拿到id后,判断是不可能为空的,就按行累加。

对于count(1)来说,InnoDB引擎遍历整张表,但不取值。server层对于返回的每一行,放一个数字“1”进去,判断是不可能为空的,按行累加。

单看这两个用法的差别的话,你能对比出来,count(1)执行得要比count(主键id)快。因为从引擎返回id会涉及到解析数据行,以及拷贝字段值的操作。

所以结论是:按照效率排序的话,count(字段)<count(主键id)<count(1)≈count(),建议使用count()。

【Mysql学习笔记】count(1)、count(*)、count(id)和count(字段)相关推荐

  1. MySQL学习笔记06【多表查询、子查询、多表查询练习】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  2. MySQL学习笔记04【数据库的查询操作、今日内容、表的约束】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  3. MySQL学习笔记-基础篇1

    MySQL 学习笔记–基础篇1 目录 MySQL 学习笔记--基础篇1 1. 数据库概述与MySQL安装 1.1 数据库概述 1.1.1 为什么要使用数据库 1.2 数据库与数据库管理系统 1.2.1 ...

  4. MySQL学习笔记-恶补基础篇

    目录 概述 1.初识数据库 1.1.DataBase 1.2.数据库分类 1.3.DBMS(数据库管理系统) 1.4.命令行操作数据库 2.操作数据库 2.1.操作数据库 2.2.数据库列类型 2.3 ...

  5. JavaEE 企业级分布式高级架构师(六)MySQL学习笔记(6)

    MySQL学习笔记 性能优化篇 性能优化的思路 慢查询日志 慢查询日志介绍 开启慢查询功能 演示一 演示二 分析慢查询日志 MySQL自带的mysqldumpslow 使用percona-toolki ...

  6. MySQL学习笔记(三)查询

    写在前面:本篇为作者自学总结,学习内容为课堂所学和网络学习笔记汇总,对于内容引用部分在文中和文末注明. 文章仅供参考,如需深入了解,请查阅MySQL参考手册.附上下载链接: 链接:https://pa ...

  7. MySQL 学习笔记②

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/BV1Kr4y1i7ru 资料链接 ...

  8. 献给入门小白的MySQL学习笔记+案例

    MySQL学习笔记 目录 MySQL学习笔记 1.SQL概述 1.1:数据库的好处 1.2:数据库管理系统 1.3:SQL语言概述 1.4:SQL语言的分类 2.安装与使用 2.1:MySql数据库产 ...

  9. 实用篇 | MySQL 学习笔记

    实用篇 | MySQL 学习笔记 MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management S ...

  10. Mysql 学习笔记(快速复习)

    Mysql 学习笔记(快速复习) 一.MySQL 基础 1.数据库连接工具 1.1.Navicat 使用教程 2.DDL 操作数据库 2.1.创建新数据库 2.2.删除数据库 2.3.使用数据库 3. ...

最新文章

  1. 使用Android Studio搭建Android集成开发环境
  2. MongoDB增加用户认证:增加用户、删除用户、修改用户密码、读写权限、只读权限...
  3. Java Switch Statement
  4. 一键Ghost 脱机下载不再愁
  5. HTTP 和 HTTPS 协议
  6. CXF(2.7.10) - A simple JAX-WS service
  7. Java并发编程 - 显示锁Lock和ReentrantLock
  8. Amoeba 主从复制和读写分离
  9. pillow api
  10. 2106. [NOIP2015] 斗地主
  11. Cordova 快速入门记录
  12. 找出数列中个数大于总数一半的元素(编程之美2.3)
  13. 【代码之路】我和代码的这两年,一路风雨,终见彩虹
  14. 使用HTML制作静态网站(圣诞节案例)
  15. C语言状态机编程进阶
  16. vscode json插件
  17. docker 常用命令
  18. 电信宽带连接数限制的一个坑
  19. excel不显示0_Excel数值为0不显示的三种解决方法
  20. Unity VR专栏(一)手柄控制

热门文章

  1. FIR滤波器以及吉布斯效应
  2. SLAM各种并行加速方法
  3. pyqt 获取 UI 中组件_安卓ui设计智能输入法如何开发,这里有介绍
  4. 几维安全用代码虚拟化技术解决IOT安全核心痛点,让万物互联更安全
  5. 垃圾回收算法(4种)垃圾回收的方式有哪些
  6. JavaScript清空数组的三种方法及效率分析
  7. vos3000外呼系统根据被叫手机号码归属地进行优先路由线路
  8. TCP/IP协议和OSI七层模型
  9. 假定有5角、1角、5分、2分和1分共5种硬币,在给顾客找硬币时,一般都会尽可能地选用硬币个数最小的方法
  10. scala illegal cyclic inheritance involving trait Iterable val data= input.flatMap(_.split(“ “))