• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > mysql大表中count()的用法以及mysql中count()的优化

mysql大表中count()的用法以及mysql中count()的优化

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了python,mysql等相关知识,希望本文的分享对您有所帮助
本篇文章给大家带来的内容是关于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中无限极分类的代码实现

Mysql数据库优化的方法总结(必看)

以上就是mysql大表中count()的用法以及mysql中count()的优化的详细内容,更多请关注微课江湖其它相关文章!

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 基于Mysql的IP处理函数inet_aton()与inet_ntoa()的深入分析
  • Mysql中校对集utf8_unicode_ci与utf8_general_ci的区别说明
  • IP处理函数inet_aton()和inet_ntoa()使用说明
  • 利用mysql的inet_aton()和inet_ntoa()函数存储IP地址的方法分享
  • 如何实现python3实现并发访问水平切分表
  • mysql大表中count()的用法以及mysql中count()的优化
  • 分享一个纯 Python 实现的 MySQL 客户端操作库
  • Python Unittest怎么进行自动化的单元测试
  • python使用unittest测试接口步奏详解
  • Python怎么统计字母出现的次数

相关文章

  • 2018-12-05推荐10款常用的事务表用法
  • 2018-12-05从以下几个方面来处理,MySQL主从复制不一致的问题
  • 2017-05-11MySQL前缀索引导致的慢查询分析总结
  • 2018-12-05MySQL:简单介绍concat和group_concat使用方法
  • 2017-05-11MySQL Sleep连接过多问题解决方法
  • 2017-05-11MySQL无法启动几种常见问题小结
  • 2018-12-05MySQL中行锁、页锁和表锁的简单介绍
  • 2018-12-05sql 普通行列转换
  • 2018-12-05Oracle7.X 回滚表空间数据文件误删除处理方法
  • 2018-12-05mysql_field_name入门教程:mysql_field_name零基础入门教程汇总

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MySQL事件的使用详解
    • SQLServer 中的死锁说明
    • select * from sp_who的解决方案
    • IN&EXISTS与NOT IN&NOT EXISTS 的优化原则小结
    • Oracle性能究极优化 下
    • SQLserver2008使用表达式递归查询
    • SQL SERVER数据操作类代码
    • 使用FORFILES命令来删除SQLServer备份的批处理
    • windows环境中mysql忘记root密码的解决方法详解
    • mybatis分页插件pageHelper实例详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有