概念:也稱組合索引,在兩個欄位或兩個欄位以上建立索引,不像單列索引這么直白,所以這里進行詳細分析一下
創建一個(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問題


轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/213856.html
標籤:其他
