mysql大表中count()的用法以及mysql中count()的优化
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql大表中count()的用法以及mysql中count()的优化,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2050字,纯文字阅读大概需要3分钟。
内容图文
![mysql大表中count()的用法以及mysql中count()的优化](/upload/InfoBanner/zyjiaocheng/537/d2406f2dfd244d1688ddd46b17bac407.jpg)
一个单表中包含有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()的优化的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是互联网集市为您收集整理的mysql大表中count()的用法以及mysql中count()的优化全部内容,希望文章能够帮你解决mysql大表中count()的用法以及mysql中count()的优化所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。