天天看點

MySQL 二級索引(非聚簇索引、輔助索引)

二級索引:葉子節點中存儲主鍵值,每次查找資料時,根據索引找到葉子節點中的主鍵值,根據主鍵值再到聚簇索引中得到完整的一行記錄。

問題:

1.相比于葉子節點中存儲行指針,二級索引存儲主鍵值會占用更多的空間,那為什麼要這樣設計呢?

  InnoDB在移動行時,無需維護二級索引,因為葉子節點中存儲的是主鍵值,而不是指針。

2.那麼InnoDB有了聚簇索引,為什麼還要有二級索引呢?

  聚簇索引的葉子節點存儲了一行完整的資料,而二級索引隻存儲了主鍵值,相比于聚簇索引,占用的空間要少。當我們需要為表建立多個索引時,如果都是聚簇索引,那将占用大量記憶體空間,是以InnoDB中主鍵所建立的是聚簇索引,而唯一索引、普通索引、字首索引等都是二級索引。

3.為什麼一般情況下,我們建表的時候都會使用一個自增的id來作為我們的主鍵?