稀疏索引和非聚集索引是兩個不同但相關的概念。
稀疏索引(Sparse Index):
定義:索引中,索引鍵值(對應于表中的列值)的唯一值數量相對于表的總行數來說比較少,這樣的索引稱為稀疏索引。
特點:索引項數目占全表數據量的比例較低,通常低于10%。
場景:對取值范圍較廣的列建立索引時,往往會產生稀疏索引,如性別、部門等枚舉值較少的字段。
非聚集索引(Non-Clustered Index):
定義:索引中的數據順序與表中數據的物理順序不同,即葉節點中除了索引鍵值外,還存儲了該行數據的物理地址(如果是InnoDB,存儲的是主鍵值)。
特點:一張表可以有多個非聚集索引。查詢數據時需要先檢索索引,再根據索引中存儲的地址或主鍵值去表中檢索數據。
場景:為非主鍵的列創建索引,提高基于該列的查詢性能。
二者關系:
非聚集索引可以是稠密索引(Dense Index)或稀疏索引,取決于索引鍵在表中的唯一值占總行數的比例。
稀疏索引通常是非聚集索引,因為索引鍵值分布稀疏,無法與表中數據的物理順序保持一致。
但并非所有的非聚集索引都是稀疏索引,對于唯一值較多的列建立的非聚集索引可能是稠密的。
綜上,稀疏索引和非聚集索引并不是完全相同的概念,但在實際應用中,稀疏索引通常以非聚集索引的形式存在。理解二者的區別和聯系,有助于更好地設計和優化數據庫索引。