什么是松散索引?
答:實際上就是當MySQL 完全利用索引掃描來實現GROUP BY 的時候,并不需要掃描所有滿足條件的索引鍵即可完成操作得出結果。
要利用到松散索引掃描實現GROUP BY,需要至少滿足以下幾個條件:
◆ GROUP BY 條件字段必須在同一個索引中最前面的連續位置;
◆ 在使用GROUP BY 的同時,只能使用MAX 和MIN 這兩個聚合函數(新版本支持更多);
◆ 如果引用到了該索引中GROUP BY 條件之外的字段條件的時候,必須以常量形式存在;
為什么松散索引掃描的效率會很高?
答:因為在沒有WHERE 子句,也就是必須經過全索引掃描的時候, 松散索引掃描需要讀取的鍵值數量與分組的組數量一樣多,也就是說比實際存在的鍵值數目要少很多。而在WHERE 子句包含范圍判斷式或者等值表達式的時候, 松散索引掃描查找滿足范圍條件的每個組的第1 個關鍵字,并且再次讀取盡可能最少數量的關鍵字。
?
什么是緊湊索引?
答:緊湊索引掃描實現GROUP BY 和松散索引掃描的區別主要在于他需要在掃描索引的時候,讀取所有滿足條件的索引鍵,然后再根據讀取的數據來完成GROUP BY 操作得到相應結果。