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

mysql大表中count()的用法案例

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

mysql大表中count()的用法案例

这篇文章主要介绍了mysql大表中count()的用法案例,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。

一个单表中包含有6000w+的数据,然而你又不能拆分.需要分别统计表中有多少数据,A产品有多少,B产品有多少这几个数据.

在为优化之前.表结构如下,为了隐藏内容我将相应字段做了模糊化处理.

CREATE TABLE `xxxx` (
  `link` varchar(200) DEFAULT NULL,
  `test0` varchar(500) DEFAULT NULL,
  `test1` varchar(50) DEFAULT NULL,
  `test2` int(11) DEFAULT NULL,
  `test3` varchar(20) DEFAULT NULL,
  `test4` varchar(50) DEFAULT NULL,
  `test5` varchar(50) NOT NULL,
  `inserttime` datetime DEFAULT NULL,
  `test6` bit(1) NOT NULL DEFAULT b'0',
  `A` bit(1) NOT NULL DEFAULT b'0',
  `B` bit(1) NOT NULL DEFAULT b'0' ,
  PRIMARY KEY (`test5`),
  KEY `test6` (`test6`) USING BTREE,
  KEY `A` (`A`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

这个一个常规的InnoDB的表格,所以它的count(*)比起MyISAM的效率慢很多,InnoDB所显示的row的行数不很准确,所以在这这里我需要统计一下.有这么几个策略.
共计61500000数据

count(*) 耗时 1539.499s

count(1) 耗时 907.581s

count(A) 对索引进行count.

count(test6) 对主键进行count.

无一例外,由于这个表没有优化好上面无论哪一种都需要几千秒的时间,这个是我们无法忍受的.

下面我们开始着手分析处理这个问题.

预期整个表的count(*)应该在200s以内为正常,100以内为良好,50以内为优秀.

首先我将里面test6抽取了出来,单独形成了一个表.对其进行操作.
共计61500000数据

count(*) 耗时10.238s

count(1) 耗时8.710s

count(test6) 对主键进行count.耗时12.957s

其中count(1)的效率最高,比最慢count(pk)速度提升了52.0%.

将你能确定的字段改为最优值,例如:

varchar更为char.虽然varchar可以自动分配存储空间的大小但是.varchar需要使用1到2个额外的字节来记录字符串的长度,增加它的update的操作时间,

datetime改为timestamp后者在1978-2038年之间

最后使用count(1)检验的时候最快耗时,168s.虽然有些慢但是可以接受.

总结:

重新设计你表中的字段,尽量优化它的长度.不要一味使用过多的varchar.

使用count(1)而不是count(*)来检索.

感谢你能够认真阅读完这篇文章,希望小编分享mysql大表中count()的用法案例内容对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,遇到问题就找亿速云,详细的解决方法等着你来学习!

免责声明:

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

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

mysql大表中count()的用法案例

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

下载Word文档

猜你喜欢

MySQL大表count()的优化实现示例

小编给大家分享一下MySQL大表count()的优化实现示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!今天实验了一下MySQL的count()操作优化, 以下
2023-06-14

mysql中having count的用法是什么

在MySQL中,HAVING COUNT语句通常用于与GROUP BY一起使用,用于过滤聚合函数结果。当需要对分组后的数据进行筛选时,可以使用HAVING COUNT语句。例如,假设有一个名为students的表,包含学生的姓名和他们考试
mysql中having count的用法是什么
2024-03-04

mysql中count和distinct的用法是什么

在MySQL中,COUNT()函数用于计算指定列中的行数,而DISTINCT关键字用于指定只统计不同的值。通常情况下,COUNT()函数会统计所有的行数,包括重复的值,而DISTINCT关键字可以确保只统计不同的值。例如,如果要统计某个表
mysql中count和distinct的用法是什么
2024-04-09

Mysql中使用count加条件统计的实现示例

目录前言测试环境准备工作条件统计总结前言最近发现在处理mysql问题时,count()函数频繁上镜,常常出现在分组统计的情景下,但是有时候并不是使用group by分好组就可以直接统计了,比如说一个常见的需求,统计每个班级男生所占的比例,
2022-07-29

详解 MySQL中count函数的正确使用方法

1. 描述 在MySQL中,当我们需要获取某张表中的总行数时,一般会选择使用下面的语句select count(*) from table;其实count函数中除了*还可以放其他参数,比如常数、主键id、字段,那么它们有什么区别?各自效率如
2022-05-17

利用mysql实现的雪花算法案例

一、为何要用雪花算法 1、问题产生的背景 现如今越来越多的公司都在用分布式、微服务,那么对应的就会针对不同的服务进行数据库拆分,然后当数据量上来的时候也会进行分表,那么随之而来的就是分表以后id的问题。 例如之前单体项目中一个表中的数据主键
2022-05-18

MySQL中临时表的使用示例

这两天事情稍微有点多,公众号也停止更新了几天,结果有读者催更了,也是,说明还是有人关注,利己及人,挺好。 今天分享的内容是MySQL中的临时表,对于临时表,之前我其实没有过多的研究,只是知道MySQL在某些特定场景下会使用临
2022-05-22

编程热搜

目录