聚集索引就是按照每張表的主鍵id和指向葉子結點的偏移量作為b+樹的非葉子結點,行記錄資料作為葉子結點,葉子結點也稱之為資料頁,且葉子結點通過雙向鍊錶連線。
由於一張資料表只有乙個主鍵,因此一張資料表也只能有乙個聚集索引。
聚集索引結構是b+樹且葉子結點通過雙向鍊錶連線,所以對於主鍵的排序查詢和範圍查詢都非常快。
輔助索引,也稱之為非聚集索引,一張表可以有多個。
輔助索引也是b+樹結構,其非葉子結點包含建立索引列的值,而其葉子結點包含建立索引列的值和書籤,書籤告訴innodb引擎**可以找到與索引對應的行資料,也就是相應的聚集索引鍵。同樣,葉子結點通過雙向鍊錶連線。
乙個輔助索引包含了查詢結果的資料就叫做覆蓋索引,即從輔助索引中就可以得到查詢結果,而不需要從聚集索引中查詢。
覆蓋索引的好處
減少io操作
當查詢某字段時,需要先查詢輔助索引,再查詢聚集索引。如果在輔助索引中就找到查詢結果,就不需要查詢聚集索引,這樣明顯減少io操作。而且輔助索引的葉子結點不包含行記錄的所有資料,也可以減少io操作。
有利於統計
對於select count(*) from users
這個查詢表記錄數的sql,通過遍歷聚集索引和輔助索引都可以得到結果,但優化器會選擇輔助索引,因為輔助索引需要的io操作少於聚集索引。
為多列字段建立乙個索引,稱之為聯合索引。
聯合索引需要遵從最左字首原則。說白了就是,資料庫根據你對多個字段建立索引的順序,從左到右依次進行排序。如果最左欄位沒有在查詢條件中使用,則不會使用該聯合索引。
聯合索引內部結構如圖:
聚集索引與輔助索引
b 樹由b樹和索引順序訪問方法 isam 演化而來的。精簡的b 樹的介紹 b 樹是為磁碟或其他直接訪問輔助裝置設計的一種平衡查詢樹。在b 樹中,所有記錄節點都是按照鍵值的大小順序存放在同一層的葉子節點上,由各葉子節點指標進行連線。b 樹索引的本質就是b 樹在資料庫中的實現。b 索引在資料庫中有乙個特...
MySQL中的聚集索引和輔助索引
當你定義乙個主鍵時,innodb儲存引擎就把他當做聚集索引 如果你沒有定義乙個主鍵,則innodb定位到第乙個唯一索引,且改索引的所有列值均為非空,就將其當做聚集索引.如果表沒有主鍵或者合適的唯一索引,innodb會產生乙個隱藏的行id值6位元組的id聚集索引 補充 由於實際的資料頁只能按照一顆b ...
Mysql (InnoDB引擎)聚集索引和輔助索引
innodb儲存引擎表是索引組織表,即按照主鍵的順序儲存資料。聚集索引 clustered index 就是按照每張表的主鍵構造一棵b 樹,樹中的葉子節點存放著表中的行記錄資料,因此,也將聚集索引的葉子節點稱為資料頁 非葉子節點中存放著僅僅是鍵值和指向葉子節點的偏移量。每個葉子節點 資料頁 都通過乙...