旗下导航:搜·么
当前位置:网站首页 > MySQL教程 > 正文

mysql大表中count()的用法以及mysql中count()的优化【MySQL教程】,python,mysql

作者:搜教程发布时间:2019-12-01分类:MySQL教程浏览:65评论:0


导读:本篇文章给人人带来的内容是关于mysql大表中count()的用法以及mysql中count()的优化,有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。一个单...
本篇文章给人人带来的内容是关于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()的优化的细致内容,更多请关注ki4网别的相干文章!

标签:pythonmysql


欢迎 发表评论: