我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL count(*)统计总数问题汇总

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL count(*)统计总数问题汇总

在日常开发工作中,我经常会遇到需要统计总数的场景,比如:统计订单总数、统计用户总数等。一般我们会使用mysql 的count函数进行统计,但是随着数据量逐渐增大,统计耗时也越来越长,最后竟然出现慢查询的情况,这究竟是什么原因呢?本篇文章带你一下学习一下。

1. MyISAM存储引擎计数为什么这么快?

我们总有个错觉,就是感觉MyISAM引擎的count计数要比InnoDB引擎更快,实际这不是错觉。

MyISAM引擎把表的总行数单独记录在磁盘上,查询的时候可以直接返回,不需要再累加统计。

但是当SQL查询中有where条件的时候,就无法再使用表的总行数了,还是需要乖乖的进行累加统计,查询性能也就跟InnoDB相差无几了。

为什么MyISAM引擎能够记录表的总行数,InnoDB引擎却不行?

因为MyISAM引擎不支持事务,只有表锁,所以记录的总行数是准确的。

而InnoDB引擎支持事务和行锁,存在并发修改的情况。又由于事务的隔离性,会出现不可重复读和幻读,记录的总行数无法保证是准确的。

2. 能不能手动实现统计总行数

既然InnoDB引擎没有帮我们记录总行数,我们能不能手动记录总行数,比如使用Redis。

其实也是不行的,使用Redis记录总行数,至少有下面3个问题:

  • 无法实现事务之间的隔离
  • 更新丢失,因为i++不是原子操作,当然可以使用Lua脚本实现原子操作,更复杂。
  • Redis是非关系型缓存数据库,不能当作关系型持久化数据库使用,一般需要设置过期时间。

MySQL count(*)统计总数问题汇总

由上图中得知,虽然Redis计数加1操作放在了事务里面,但是不受事务控制的,在事务没有提交前,其他查询依然读到了最新的总行数,这就是脏读的情况。

3. InnoDB引擎能否实现快速计数

有一种办法,可以粗略估计表的总行数,就是使用MySQL命令:

show table status like 'user';

MySQL count(*)统计总数问题汇总

真实的总行数有100万行,预估有99万多行,误差在可接受的范围内。

部分场景适用,比如粗略估计网站的总用户数。

4. 四种计数方式的性能差别

常见的统计总行数的方式有以下四种:

count(*) 、 count(常量) 、 count(id) 、 count(字段)

InnoDB引擎对count计数做了优化,会选用数据量较小的非聚簇索引进行统计。

比如用户表中有三个索引,分别是主键索引、name索引和age索引,使用执行计划查看计数的时候用到了哪个索引?

CREATE TABLE `user` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(100) DEFAULT NULL COMMENT '姓名',
  `age` tinyint NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`),
  KEY `idx_age` (`age`)
) ENGINE=InnoDB COMMENT='用户表';
explain select count(*) from user;

MySQL count(*)统计总数问题汇总

用到了数据量较小的age索引。

count(*) 、 count(常量) 是直接统计表中的总行数,效率较高。

而 count(id) 还需要把数据返回给MySQL Server端进行累加计数。

最后 count(字段)需要筛选不为null字段,效率最差。

四种计数的查询性能从高到低,依次是:

count(*) ≈ count(常量) > count(id) > count(字段)

对于大多数情况,得到计数结果,还是老老实实使用count(*)

所以推荐使用select count(*),别跟**select *搞混了,不推荐使用select ***的。

到此这篇关于MySQL count(*)统计总数的文章就介绍到这了,更多相关MySQL count(*)统计总数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL count(*)统计总数问题汇总

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Mysql索引常见问题汇总

Q1:数据库有哪些索引?优缺点是什么? 1.B树索引:大多数数据库采用的索引(innoDB采用的是b+树)。能够加快访问数据的速度,尤其是范围数据的查找非常快。缺点是只能从索引的最左列开始查找,也不能跳过索引中的列,如果查询中有某个列用到了
2022-05-17

python链接mysql常见问题汇总

Python与Mysql一、安装MySQLdb模块使用python连接Mysql的前提,就是需要一个让python连接到Mysql的接口,这就是MySQLdb模块。验证是否已经安装了MySQLdb:=====================
2023-01-31

计算机软考考试常见问题汇总

  本文为计算机软考考试常见问题汇总,帮助考生解决计算机软考考试从报名条件、报名时间、报名方式、考试用书、考试科目、考试时间到成绩复查、合格标准、证书领取、职称对应方面的困惑。  计算机软考考试常见问题汇总如下:  【问题1】计算机软件资格考试是否有正高级专业资格考试?  答:计算机软件资格考试没有开设正高级资格。  
计算机软考考试常见问题汇总
2024-04-19

数据库的统计汇总分组合并

对表数据进行检索时,经常需要对结果进行汇总或计算,例如,在学生成绩数据库中求某门课程的总成绩,统计个分数段的人数等。1.统计函数统计函数用于计算表中的数据,返回单个计算结果SUM和AVG函数:分别用于求表达式中所有值项的总和与平均值--求选修100012课程的
数据库的统计汇总分组合并
2021-02-15

软考嵌入式系统设计师报名常见问题汇总

  本文为软考嵌入式系统设计师报名常见问题汇总,帮助考生解答嵌入式系统设计师报名相关的困惑,如:嵌入式系统设计师报名条件是什么、嵌入式系统设计师报名时间和方式、嵌入式系统设计师报名费用等等。  【问题1】软考嵌入式系统设计师报名条件是什么?  答:软考嵌入式系统设计师报名条件根据《计算机技术与软件专业技术资格(水平)考
软考嵌入式系统设计师报名常见问题汇总
2024-04-19

MySQL扩展VARCHAR长度遭遇问题汇总分析

MySQL扩展VARCHAR长度问题汇总分析问题1:实际存储长度超长原因:输入数据过长或字符集编码导致解决:限制输入长度或使用紧凑字符集问题2:存储空间浪费原因:VARCHAR存储实际长度,定义长度过大解决:合理定义长度或使用固定长度的CHAR问题3:索引性能不佳原因:VARCHAR长度过大导致索引膨胀和重复值解决:合理定义长度或创建唯一索引问题4:数据截断原因:输入数据过长或不允许截断解决:限制输入长度或修改数据库设置问题5:数据完整性问题原因:VARCHAR长度过小或数据更新导致超长解决:合理定义长度
MySQL扩展VARCHAR长度遭遇问题汇总分析
2024-04-02

软考软件设计师报名常见问题汇总

  本文为软考软件设计师报名常见问题汇总,帮助考生解答软件设计师报名相关的困惑,如:软件设计师报名条件是什么、软件设计师报名时间和方式、软件设计师报名费用等等。  【问题1】软考软件设计师报名条件是什么?  答:软考软件设计师报名条件根据《计算机技术与软件专业技术资格(水平)考试暂行规定》(国人部发〔2003〕39号)
软考软件设计师报名常见问题汇总
2024-04-19

MySQL 常见的数据表设计误区汇总

目录误区一:过多的数据列误区二:过多的联合查询误区三:滥用 SET替代 ENUM误区四:生硬地避免NULL误区五:使用整数替换时间戳误区六:忘记字段的最大存储范围结语:误区一:过多的数据列MySQL 存储引擎的 API 是按照行缓冲区方式从
2022-05-13

软考系统分析师报名常见问题汇总

  本文为软考系统分析师报名常见问题汇总,帮助考生解答系统分析师报名相关的困惑,如:系统分析师报名条件是什么、系统分析师报名时间和方式、系统分析师报名费用等等。  软考系统分析师报名常见问题汇总如下:  【问题1】软考系统分析师报名条件是什么?  答:软考系统分析师报名条件根据《计算机技术与软件专业技术资格(水平)考试
软考系统分析师报名常见问题汇总
2024-04-19

win10手机系统预览版10051已知问题汇总

win10手机系统预览版10051虽然在推送中发生问题,不过现在可以正常升级win10手机系统预览版10051了。那现在来看一看win10手机系统预览版10051已知问题都有哪些吧! win10手机系统预览版100javascript51已
2023-06-13

软考数据库系统工程师报名常见问题汇总

  本文为软考数据库系统工程师报名常见问题汇总,帮助考生解答数据库系统工程师报名相关的困惑,如:数据库系统工程师报名条件是什么、数据库系统工程师报名时间和方式、数据库系统工程师报名费用等等。  【问题1】软考数据库系统工程师报名条件是什么?  答:软考数据库系统工程师报名条件根据《计算机技术与软件专业技术资格(水平)考
软考数据库系统工程师报名常见问题汇总
2024-04-19

Excel数据导入Mysql常见问题汇总:如何处理数据格式转换的问题?

Excel数据导入Mysql常见问题汇总:如何处理数据格式转换的问题?导入Excel数据到MySQL数据库是一种常见的数据迁移方式,但在这个过程中经常会遇到数据格式转换的问题。本文将为读者总结一些常见的数据格式转换问题,并提供解决方案。日期
2023-10-22

Sql根据不同条件统计总数的方法(count和sum)

目录前言方法一 :Count方法二:sum后记前言经常会遇到根据不同的条件统计总数的问题,一般有两种写法:count和sum都可以数据准备:方法一 :Count代码:SELECTCOUNT(CASEWHEN age > 20AND a
Sql根据不同条件统计总数的方法(count和sum)
2024-08-22

软考电子商务设计师报名常见问题汇总

  本文为软考电子商务设计师报名常见问题汇总,帮助考生解答电子商务设计师报名相关的困惑,如:电子商务设计师报名条件是什么、电子商务设计师报名时间和方式、电子商务设计师报名费用等等。  【问题1】软考电子商务设计师报名条件是什么?  答:软考电子商务设计师报名条件根据《计算机技术与软件专业技术资格(水平)考试暂行规定》(
软考电子商务设计师报名常见问题汇总
2024-04-19

两种方法实现mysql分组计数,范围汇总

第一种:常规操作SELECTSUM(ddd) AS count_days,CASE WHEN aa.days >= 1 AND aa.days < 3 THEN'1-3' WHEN aa.days >= 3 AND aa.days < 5
2022-05-29

软考信息系统监理师报名常见问题汇总

  本文为软考信息系统监理师报名常见问题汇总,帮助考生解答信息系统监理师报名相关的困惑,如:信息系统监理师报名条件是什么、信息系统监理师报名时间和方式、信息系统监理师报名费用等等。  【问题1】软考信息系统监理师报名条件是什么?  答:软考信息系统监理师报名条件根据《计算机技术与软件专业技术资格(水平)考试暂行规定》(
软考信息系统监理师报名常见问题汇总
2024-04-19

编程热搜

目录