Mysql的count函数用于统计符合条件的记录数,常用的方式有:

1、count(*)
2、count(1)
3、count(id)
4、count(col)

首先需要明确一点:count函数对于返回的结果集,一行行地判断,不会统计null值。

初学者经常会纠结到底应该使用哪种方式做计数,实际上这四种计数方式是有很大差别的。
count()的原理:

  1. count(*)
    遍历整张表,不需要取出数据来计算,直接按行累计。

  2. count(1)
    遍历整张表,不需要取数,按行计数。

  3. count(id)
    遍历整张表,取出id,按行计数。

  4. count(col)
    遍历整张表,取出col,如果字段定义不为null,取出col之后,按行计数。如果字段定义可以为null,循环对col进行判断是否为null值,再计数。

这四种计数方式遍历整张表的方式也有不同:

  1. count(*)
    会找任意较小的索引遍历,如果没有二级索引,就会直接遍历主键索引,因为主键索引包含了全表数据,所以在字段比较大的时候,可能会需要频繁去磁盘取数据,导致count() 效率低,耗时长,结局方案是给一个小字段加个二级索引,这样count() 的时候就会遍历这个二级索引,快速进行计数。
  2. count(1)
    使用索引遍历的选择和 count(*)一致。
  3. count(id)
    使用主键索引遍历
  4. count(col)
    如果col建立了二级索引,则会遍历二级索引,否则主键索引

所以,性能上排序为:count(*) > count(1) > count(id) > count(col)。

在不考虑是否对null计数得区别的前提下,性能优化的方向,除了使用count(*) 外,就是适当使用小的二级索引。

Mysql count 的多种使用方式性能比较相关推荐

  1. MySQL数据库的多种连接方式

    一.MySQl命令行客户端 在Mysql安装完成后,Mysql命令行会自动配置在计算机上,在菜单中找到MySql 8.0 Command Line Client,输入密码即可进入.(密码在安装过程中设 ...

  2. Nginx下Go的多种使用方式性能比较

    结论:Go HTTP standalone >(优于)   Nginx proxy to Go HTTP >(优于) Nginx fastcgi to Go TCP FastCGI 原文链 ...

  3. MySQL 我们来聊聊 count(*) 语句的优化方式有哪些?

    志在巅峰的攀登者,不会陶醉在沿途的某个脚印之中,在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天.每周,都会留下一些脚印,就是这些创作的 ...

  4. Mysql insert 多种使用方式(insert into/insert ignore /replace into/on deplicate key update)

    Mysql insert 多种使用方式(insert into/insert ignore /replace into/on deplicate key update) 1 insert into t ...

  5. mysql表的设计几种方式_支持多种登录方式的数据表设计 | 六阿哥博客

    一个带有用户系统的应用最基本登录方式是站内账号登录,但这种方式往往不能满足我们的需求.现在的应用基本都有站内账号.email.手机和一堆第三方登录,那么如果需要支持这么多种登录方式,或者还有银行卡登录 ...

  6. mysql count 优化索引_如何通过使用索引在InnoDB上优化COUNT(*)性能

    我有一个小而狭窄的InnoDB表,大约有900万条记录.在桌子上count(*)或count(id)桌子上做的速度非常慢(超过6秒): DROP TABLE IF EXISTS `perf2`; CR ...

  7. mysql数据库sql优化_MySQL 数据库性能优化之SQL优化

    注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础 优化目标 减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据 ...

  8. C# 高性能 TCP 服务的多种实现方式

    哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣,为了吸引眼球所以标题中一定要突出,其实我更喜欢的标题是<猴赛雷,C# 编写 TCP 服务的花样姿势!>. 本篇文 ...

  9. C#高性能TCP服务的多种实现方式

    ☆ 哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣,为了吸引眼球所以标题中一定要突出,其实我更喜欢的标题是<猴赛雷,C#编写TCP服务的花样姿势!>. 本篇文章 ...

最新文章

  1. 京东方剑指物联网领域
  2. Java 8 vs. Scala之Lambda表达式
  3. python大神-python大神教你在最短时间内学会爬取大规模数据
  4. python网上编程课程-少儿编程 为你解读Python编程课程
  5. 【excel】vlookup
  6. Linux文件锁学习-flock, lockf, fcntl
  7. [MSSQL]COALESCE与ISNULL函数
  8. php输出楼层号,ZBlog开发中实现评论楼层号正确输出的具体方法代码
  9. php package manager,package命令的安装教程
  10. 如何不用MDI方式在Form1上显示Form2
  11. centos安装 mysql_centos下安装MySQL数据库
  12. python一元线性回归算法_Python机器学习(二):线性回归算法
  13. 键盘 计算机代码,键盘钩子示例
  14. 电脑开机加速,一下子就提升了20几秒
  15. 贴片电阻阻值识别方法
  16. 序设计思维与实践 CSP-M4
  17. R7 6800H 和 R5 6600H的差距大吗 哪个好
  18. x~N(0,4),F(x)为其分布函数,则F(x)
  19. 01 A股10个月争取翻10倍实盘操作记录(前言)
  20. 网络通信之传输层协议

热门文章

  1. Emlog明月浩空主题模板V2.7分享
  2. 从零打造springboot+freemarker+layui实现简易CMS管理系统(一)
  3. Vue 实现图片在循环中 默认 和 选中 之间的点击切换
  4. 早晚安打卡签到v2.0.1 公众号模块
  5. 飞机大战HTML5游戏源码,基于Canvas制作的网页版飞机大战游戏+飞机大战手机端
  6. 全网最细Linux之Centos8安装MySQL8.0以上版本,您值得收藏!
  7. 安装kloxo。需要注意的事项
  8. Linux 死机了怎么办
  9. LeetCode 258. Add Digits
  10. Linux文件系统不是必须的,而是必要的!