二級索引又稱輔助索引、非聚集索引(no-clustered index)。b+tree樹結構。然而二級索引的葉子節點不保存記錄中的所有列,其葉子節點保存的是<健值,(記錄)地址>。好似聚集索引中非葉子節點保存的信息,不同的是二級索引保存的是記錄地址,而聚集索引保存的是下一層節點地址。記錄的地址一般可以保存兩種形式。?
1. 記錄的物理地址,頁號:槽號:偏移量?
2 . 記錄的主鍵值
innodb引擎是索引組織表,所有記錄都放在聚集索引里,因此其輔助索引中的記錄地址存放的主鍵的鍵值。
innodb讀操作:
通過二級索引查詢記錄僅能得到主鍵值,要查詢完整的記錄還需要再通過一次聚集索引查詢,這種查詢方式為書簽查找(bookmark lookup)。?
注:聚集索引:例如查字典,每個字所在的位置有一個頁碼,如果你知道一個字的所在具體頁數便可直接翻到相應的頁,此刻可以把字典中的頁碼看成主鍵。字典的正文就是一個查詢目錄而不需要在通過其他目錄來查找。這種正文本身具有一定的規則排序的目錄稱為聚集索引。?
二級索引:此操作就如查字典,先找到生字的偏旁部首查找到字在哪一頁(獲得主鍵的位置),然后再翻到生字的具體章節葉。
innodb寫操作:
僅當主鍵發生改變時,才會更新二級索引
二級索引的非葉子節點存放的記錄格式為<鍵值,主鍵值,地址>,二級索引的非葉子節點依然存在主鍵信息。二級索引節點的記錄不保存隱藏列xid和roll ptr。聚集索引的非葉子節點保存的是下一層節點地址。?
由于二級索引不包含記錄的完整信息,在innodb存儲引擎中二級索引的樹高度比聚簇索引的樹高度小,二級索引效率低。