比如mysql 單列索引是將該列資料當做關鍵字構建一顆b+tree,但是組合索引是如何實現的呢?比如兩個欄位的組合索引,select * from table1 where a=22 and b=33 ; 是要建兩棵樹嗎?如果只建立一顆樹,那b列是如何存放的?
一棵樹
如果是單列,就按這列資料進行排序
如果是多列,就按多列資料排序,首先根據第一列排序,在第一列一樣的情況下,第二列再排序。例如有(1,1) (2,2) (2,1) (1,2)
那在索引中的葉子節點的資料順序就是(1,1)(1,2)(2,1)(2,2)
這也是為什麼查詢復合索引的字首是可以用到索引的原因(最左字首原則)
聯合索引使用規則
假設某個表有乙個聯合索引 c1,c2,c3,c4 一下 只能使用該聯合索引的c1,c2,c3部分 a where c1 x and c2 x and c4 x and c3 x b where c1 x and c2 x and c4 x order by c3 c where c1 x and c...
mysql聯合索引的使用規則
從一道有趣的題目開始分析 假設某個表有乙個聯合索引 c1,c2,c3,c4 以下選項哪些字段使用了該索引 a where c1 x and c2 x and c4 x and c3 x b where c1 x and c2 x and c4 x order by c3 c where c1 x a...
mysql 聯合索引使用規則
從一道有趣的題目開始分析 假設某個表有乙個聯合索引 c1,c2,c3,c4 以下選項哪些字段使用了該索引 a where c1 x and c2 x and c4 x and c3 x b where c1 x and c2 x and c4 x order by c3 c where c1 x a...