基本形式組的查詢是:的MySQL查詢優化,範圍/綜合指數/由
EXPLAIN SELECT SUM(impressions) as impressions, SUM(clicks) as clicks, SUM(cost) as cost, SUM(conversions) as conversions, keyword_id FROM `keyword_track` WHERE user_id=1 AND campaign_id=543 AND `recorded`>1325376071 GROUP BY keyword_id
看來,我可以索引說USER_ID,CAMPAIGN_ID和keyword_id並獲得GROUP BY沒有文件排序,但對記錄的一系列指標是真的要更積極地削減行,這個例子有一個很大的範圍,但其他查詢有一個更小的時間範圍。
表的樣子:
CREATE TABLE IF NOT EXISTS `keyword_track` (
`track_id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL,
`campaign_id` int(11) NOT NULL,
`adgroup_id` int(11) NOT NULL,
`keyword_id` int(11) NOT NULL,
`recorded` int(11) NOT NULL,
`impressions` int(11) NOT NULL,
`clicks` int(11) NOT NULL,
`cost` decimal(10,2) NOT NULL,
`conversions` int(11) NOT NULL,
`max_cpc` decimal(3,2) NOT NULL,
`quality_score` tinyint(4) NOT NULL,
`avg_position` decimal(2,1) NOT NULL,
PRIMARY KEY (`track_id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
我已經離開我現在有出任何按鍵。基本上通過的問題是什麼將最好的辦法是在指數得到上仍然索引至少CAMPAIGN_ID和理想不需要對文件排序(雖然這可能是一個可以接受的折衷得到記錄的時間範圍指數)的範圍內。
感謝的是,並沒有真正前的範圍將如何阻止索引的其他部分被責令把握。 – 2012-01-23 03:43:57
歡迎您 – Uday 2012-01-23 06:45:55