巧建MySQL sum索引以提升效率

日期: 2010-10-31 作者:sunss 来源:TechTarget中国 英文

  有两个表,表a

  CREATE TABLE `a` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`fid` smallint(6) unsigned NOT NULL DEFAULT ‘0’,
`cnt` smallint(6) unsigned NOT NULL DEFAULT ‘0’,



PRIMARY KEY (`id`),
KEY `idx_fid` (`fid`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8

  表b

  CREATE TABLE `b` 
(`fid` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
`name` char(50) NOT NULL DEFAULT ”,



PRIMARY KEY (`fid`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8

  操作SQL如下:

 SELECT COUNT(*) AS num1, SUM(a.cnt)+COUNT(*) AS num2
FROM a, b
WHERE b.fid=’10913′ AND a.fid=b.fid

  我们先看下执行计划:

  

  我们可以看到扫描行数是229049行,执行时间:

  

  太可怕了,运行set profiling=1,让我们看看时间主要消耗在哪里?

  

  sending data花费的时间较长,那这段时间到底是做什么的呢?先看下这个吧:http://renxijun.blog.sohu.com/82906360.html

  意思是它在为select语句准备数据,解决办法:

  建索引:

  create index idx_fid_cnt on a (fid,cnt);

  再看下,执行计划和执行时间:

  

  总结:使用恰当的索引,是sql的效率倍增,类似sum的函数还有min(),max(),这些都需要在字段上建索引。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

sunss
sunss

相关推荐

  • 讲解MySQL中的降序索引

    反向检索与正向检索的速度一样的快。但是在某些操作系统上面,并不支持反向的read-ahead预读,所以反向检索会略慢。

  • MySQL的B-Tree索引和Hash索引的区别

    Hash索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问。