[SQL]淺談索引(一)
多數工程師都知道索引可以提高查詢效能,但是索引建多了會影響資料寫入的效能,但可能沒有真的認識一下索引,這不是不可能,因為後學就是一個例子,哈哈。
MS SQL 的索引分為叢集索引(Clustered Index)、非叢集索引(NonClustered Index),以下稍微整理一下兩個得差別
叢集索引(Clustered Index):
1. 當資料表設定了「叢集索引」,則資料表「實體資料列」的順序會依據叢集索引的值做排序
2. 每一資料表只能有一個「叢集索引」
3. SQL Server 資料表的主索鍵(PK),預設為「叢集索引」且是唯一的(Unique)
4. B-Tree結構
非叢集索引(NonClustered Index):
1. 資料列未根據非叢集索引進行排序與儲存
2. 每一資料表能有249個「非叢集索引」
3. 組合欄位索引有16欄位與總和900位元組索引鍵大小的限制 ,可以使用內含資料行(INCLUDE)來規避這個限制並加速查詢作業。
CREATE NONCLUSTERED INDEX [IX_TableName_UNo]
ON [TableName] ([UNo] ASC)
INCLUDE ([birthday])
4. B-Tree結構
叢集索引、非叢集索引比較:
a.叢集索引插入資料時速度較慢(時間花費在「物理存儲的排序」上,要找到對的位置進行插入)
b.查詢資料速度: 叢集索引 > 非叢集索引
c.非叢集索引建立的先後順序並不是很重要,因為它們不會互相影響也不會對改變資料表中實際資料的排序,但是建立叢集索引會影響實際資料排列,也會影響已建立的非叢集索引。
此篇文章只是整理一下近日了解SQL Server上Index的資料。
參考資料:
egan2608@gmail.com