1. 程式人生 > >聚集索引與二級索引

聚集索引與二級索引

內容 b+tree 聚簇索引 官方 主鍵 全表掃描 tex 筆記 nod

筆記內容整理自《高性能Mysql》以及mysql官方文檔 索引是在存儲引擎層實現,因此不同的存儲引擎有各自的索引工作方式。 Innodb使用的是B+Tree 每個innodb表都有一個聚簇索引,聚簇索引中存儲了行的數據。 一般情況下,聚簇索引等同於主鍵。 可以通過聚簇索引優化查詢、插入以及其他數據庫操作。 聚簇索引定義 當在表中定義主鍵時,innodb默認使用主鍵作為聚簇索引,如果沒有邏輯唯一列並且是非空的,則應該添加一個自增的列。 如果沒有主鍵時,Mysql會找到唯一索引列中的第一列同時非空的列作為聚簇索引。 如果表中沒有主鍵或者合適的唯一索引,則innodb會在內部生成一個隱藏的聚簇索引。 聚簇索引如果加快查詢
通過聚簇索引訪問行快,是因為索引直接包含所有行數據。 存儲引擎不在需要進行全表掃描來獲得需要的數據,而是從索引的根節點開始搜索。根節點中存放的是指向子節點的指針,存儲引擎根據這些指針向下查找,通過比對節點頁的值和要查詢的值可以找到合適的指針進入下層節點,這些指針實際上定義了子節點頁中值得上限和下限。最終存儲引擎要麽找到對應的值,要麽該記錄不存在。葉子節點比較特殊,他們的指針指向的是被索引的數據. 二級索引如何與聚簇索引關聯 出了聚簇索引外其他的所有索引都是二級索引。在innodb中,二級索引中每個記錄都包含該行的主鍵列以及二級索引指定的列。Innodb使用主鍵值來搜索聚簇索引中的行。 聚簇索引特點
聚簇索引是順序存儲的. 索引減少了服務器需要掃描的數據量 索引可以幫助服務器避免排序和臨時表 索引可以將隨機I/0變為順序I/O

聚集索引與二級索引