二級索引:葉子節點中存儲主鍵值,每次查找資料時,根據索引找到葉子節點中的主鍵值,根據主鍵值再到聚簇索引中得到完整的一行記錄。
問題:
1.相比于葉子節點中存儲行指針,二級索引存儲主鍵值會占用更多的空間,那為什麼要這樣設計呢?
InnoDB在移動行時,無需維護二級索引,因為葉子節點中存儲的是主鍵值,而不是指針。
2.那麼InnoDB有了聚簇索引,為什麼還要有二級索引呢?
聚簇索引的葉子節點存儲了一行完整的資料,而二級索引隻存儲了主鍵值,相比于聚簇索引,占用的空間要少。當我們需要為表建立多個索引時,如果都是聚簇索引,那将占用大量記憶體空間,是以InnoDB中主鍵所建立的是聚簇索引,而唯一索引、普通索引、字首索引等都是二級索引。
3.為什麼一般情況下,我們建表的時候都會使用一個自增的id來作為我們的主鍵?