12.索引合併-indexMerge
navyum發表於2024-10-28
索引合併 index merge:
- 含義:使用到
多個索引
來完成一次查詢的執行方法
- explain 中
type
會顯示index merge
核心思想:
- 讀多個二級索引的操作是順序IO(索引是有序的),只用一個索引,但是做回表操作是隨機IO
- 索引合併優點:
- 可以減少回表次數
- 基於有序的主鍵回表 Rowid Ordered Retrieval,簡稱ROR。
索引合併分類:
Intersection合併(交集):
- 條件中有多個
AND
- 使用條件:
- 二級索引列需要是等值匹配的情況;對於聯合索引,索引中的每個列都必須等值匹配,不能只匹配部分列
- 主鍵列可以是範圍匹配(只有在這種情況下根據二級索引查詢出的結果集是按照主鍵值排序的)
- 最終是否會使用索引合併,還是得看最佳化器的成本計算結果
Union合併:
- 條件中多個OR
- 使用條件:
- 二級索引列需要是等值匹配的情況;對於聯合索引,索引中的每個列都必須等值匹配,不能只匹配部分列
- 主鍵列可以是範圍匹配
- 使用
Intersection
索引合併的搜尋條件
Sort-Union合併:
- 條件中多個OR
- 不強求所有條件都是等值匹配
- 具體做法:
- 先按照多個二級索引記錄找到對應的多個主鍵集合,分別進行主鍵排序
- 再按照
Union
索引合併方式執行