MySQL鬆散索引掃描與緊湊索引掃描

2022-09-23 05:12:19 字數 627 閱讀 8418

什麼是鬆散索引?

答:實際上就是當mysql 完全利用索引掃描來實現group by 的時候,並不需要掃描所有滿足條件的索引鍵即可完成操作得出結果。

要利用到鬆散索引掃描實現group by,需要至少滿足以下幾個條件:

◆ group by 條件欄位必須在同一個索引中最前面的連續位置;

◆ 在使用group by 的同時,只能使用max 和min 這兩個聚合函式(新版本支援更多);

◆ 如果引用到了該索引中group by 條件之外的欄位條件的時候,必須以常量形式存在;

為什麼鬆散索引掃描的效率會很高?

答:因為在沒有where 子句,也就是必須經過全索引掃描的時候, 鬆散索引掃描需要讀取的鍵值數量與分組的組數量一樣多,也就是說比實際存在的鍵值數目要少很多。而在where 子句包含範圍判斷式或者等值表示式的時候, 鬆散索引掃描查詢滿足範圍條件的每個組的第1 個關鍵字,並且再次讀取儘可能最少數量的關鍵字。

什麼是緊湊索引?

答:緊湊索引掃描實現group by 和鬆散索引掃描的區別主要在於他需要在掃描索引的時候,讀取所有滿足條件的索引鍵,然後再根據讀取的資料來完成group by 操作得到相應結果。