這幾天在面試各種各樣的公司,很多面試題都有問到聯合索引這個東西,但我之前確實是不知道怎么用聯合索引的,於是我查閱了網上很多關於聯合索引的解讀和分析,主要研究的是,where、group by、order by對聯合索引的使用情況是怎么樣的。
創建一個表,包括c1,c2,c3,c4,c5字段
創建聯合索引,c1234(c1,c2,c3,c4)
1、只有where的情況,遵從最左原則,條件必須有左邊的字段,才會用到索引,中間如果斷開了,則都不會用到后面的索引,
例子: where c1 = '1' and c2 = '1' and c4 = '1',這種情況因為c3沒有在條件中,所以只會用到c1,c2索引。
特殊情況,使用范圍條件的時候,也會使用到該處的索引,但后面的索引都不會用到
例子: where c1 = '1' and c2 > '1' and c3 = '1',這種情況從c2處已經斷開,會使用到c1,c2索引,不會再使用到后面的c3,c4索引。
2、group by和order by 其實一樣,也是遵從最左原則,可以看做繼承where的條件順序,但需要where作為基礎鋪墊,即沒有where語句,單純的group by | order by 也是不會使用任何索引的,並且需要和聯合索引順序一致才會使用索引。
例子:
group by c1 | order by c1,由於沒有where的鋪墊,不使用任何索引
where c1 = '1' group | order by c2,使用c1,c2索引
where c1 = '1' group | order by c3,只使用c1索引
where c1 > '1' group | order by c2,前面也說了,范圍搜索會斷掉連接,所以也只會使用c1索引
關於順序:
where c1 = '1' group | order by c2,c3,使用c1,c2,c3索引
where c1 = '1' group | order by c3,c2,只使用c1索引