top
Loading...
7.2.13.2.緊湊索引掃描
7.2.13.2. 緊湊索引掃描

緊湊式索引掃描可以為索引掃描或一個范圍索引掃描,取決于查詢條件。

如果不滿足松散索引掃描條件,GROUP BY查詢仍然可以不用創建臨時表。如果WHERE子句中有范圍條件,該方法只讀取滿足這些條件的關鍵字。否則,進行索引掃描。該方法讀取由WHERE子句定義的每個范圍的所有關鍵字,或沒有范圍條件式掃描整個索引,我們將它定義為緊湊式索引掃描。請注意對于緊湊式索引掃描,只有找到了滿足范圍條件的所有關鍵字后才進行組合操作。

要想讓該方法工作,對于引用GROUP BY關鍵字元素的前面、中間關鍵字元素的查詢中的所有列,有一個常量等式條件即足夠了。等式條件中的常量填充了搜索關鍵字中的“差距”,可以形成完整的索引前綴。這些索引前綴可以用于索引查找。如果需要排序GROUP BY結果,并且能夠形成索引前綴的搜索關鍵字,MySQL還可以避免額外的排序操作,因為使用有順序的索引的前綴進行搜索已經按順序檢索到了所有關鍵字。

上述的第一種方法不適合下面的查詢,但第2種索引訪問方法可以工作(假定我們已經提及了表t1的索引idx)

·         GROUP BY中有一個差距,但已經由條件c2 = 'a'覆蓋。

     SELECT c1c2c3 FROM t1 WHERE c2 = 'a' GROUP BY c1c3;

·         GROUP BY不以關鍵字的第1個元素開始,但是有一個條件提供該元素的常量:

     SELECT c1c2c3 FROM t1 WHERE c1 = 'a' GROUP BY c2c3;
作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/optimization.html
北斗有巢氏 有巢氏北斗