聯合索引,組合索引,詳細應用範例

2020-11-13 13:00:47

概念:也稱組合索引,在兩個欄位或兩個欄位以上建立索引,不像單列索引這麼直白,所以這裡進行詳細分析一下

建立一個(a,b)的聯合索引,那麼它的索引樹就是下圖的樣子
在這裡插入圖片描述

(1)從結構圖可以看出,第一個欄位是有序排序的,其他欄位是無序的 這裡就可以看出 a的排序 是 1 1 2 2 3 3 是有序 b的排序 1 2 1 4 1 2是沒有序的(整體來看)
(2)從結構圖可以看出,如果在第一個欄位有序 第二個欄位有序…基礎上,那麼往下的一個欄位排序是有序的 例如 a=1 那麼 (1,1) (1,2) 這幾個組合 這幾個組合 中 往下的一個欄位 b 排序 是 1 2 是有序的 (區域性來看)
(3)where 條件: where語句 需要吻合 最左原則 例如 建立 聯合索引 (a,b,c) 相當於建立了三個索引 (a) (a,b) (a,b,c)
那麼 要想使用這個聯合索引 where 語句 應該是
1、where a=’’
2、 where a=’’ and b=’’
3、where a=’’ and b=’’ and c=’’ ( where 欄位的編寫順序不會影響解析優化器是否選用 該索引 就是說 【where a=’’ and b=’’ and c=’’ 」】與 【c=’’ and a=’’ and b=’’】一樣的解析執行效果 )
where 語句不應該是 where a=’’ and c=’’ 或者 where b=’’ 或者 where c=’’ 或者 where b=’’ and c=’’ 因為這些語句 沒有按照 (a)(a,b)(a,b,c)
(4)模糊查詢中 like 「a%」 是能使用到索引的 因為 a開頭 能使用索引進行範圍的查詢,是一個 range 級別的查詢

應用例子
(1) 多個欄位 and 考慮使用聯合索引
在這裡插入圖片描述

(2) 解決回表問題

在這裡插入圖片描述

(3)解決filesort排序問題 以及 group by temporary問題
filesotr問題
在這裡插入圖片描述

在這裡插入圖片描述

group by問題
在這裡插入圖片描述

在這裡插入圖片描述