分享MySQL提高至少100%的效率的sum索引創建示例

本文和大家分享一下MySQL巧建sum索引幫我們提高至少100%的效率。
有兩個表,表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 num2FROM a, bWHERE 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(),這些都需要在字段上建索引

文章來自學IT網:http://www.xueit.com/html/2010-10/30-155121845120101030144005500.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章