Mysql (InnoDB引擎)聚集索引和輔助索引
阿新 • • 發佈:2018-12-09
聚集索引:
InnoDB儲存引擎表是索引組織表,即按照主鍵的順序儲存資料。 聚集索引(clustered index)就是按照每張表的主鍵構造一棵B+樹,樹中的葉子節點存放著表中的行記錄資料,因此,也將聚集索引的葉子節點稱為資料頁;非葉子節點中存放著僅僅是鍵值和指向葉子節點的偏移量。每個葉子節點(資料頁)都通過一個雙向連結串列進行連線。 由於實際的資料頁只能按照一棵B+樹進行排序,因此資料庫中每張表只能有一個聚集索引。 聚集索引能過特別快的訪問針對範圍值的查詢。
注意:聚集索引並不是在物理儲存上是連續的,其只是在邏輯上連續,這有兩點: 一、資料頁是按照主鍵的順序並通過雙向連結串列連結的,因此物理儲存上可以不按主鍵順序儲存。 二、資料頁中的記錄也是通過雙向連結串列進行維護的,物理儲存上同樣可以不按主鍵順序儲存。
聚集索引的好處: 一、對於主鍵的排序查詢非常的快(因為其葉子節點是用雙向連結串列連結的) 二、對於主鍵的範圍查詢非常的快(因為通過葉子節點的上層中間節點,就可以得到葉結點的範圍值)
輔助索引:
輔助索引(Secondary index)也是B+樹結構,但其在葉子節點中並不包含行記錄的全部資料。除了包含鍵的值(建立輔助索引的列中的值)外,還包含了一個書籤,這個書籤用來告訴InnoDB引擎從哪裡可以找到與索引相對應的行資料。由於InnoDB引擎是索引組織表,因此,這個書籤就是相應的行資料的聚集索引鍵。 因為輔助索引不會對影響資料在聚集索引中的組織,所以可以有多個。
除了索引組織表結構外,還有一種堆表的表結構,即行資料的儲存是按照插入的順序儲存的。如SQL Server資料庫