[SQL]淺談索引(一)

[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的資料。

參考資料:

叢集與非叢集索引說明

叢集索引結構

非叢集索引結構

建立內含資料行的索引

B-Tree

egan2608@gmail.com