[SQL SERVER][Performance]索引對DU的影響

[SQL SERVER][Performance]索引對DU的影響

我相信大家一定都知道索引會影響資料操作效能,

當一個資料表索引過多時,針對該資料表進行資料新增一定會拉長作業時間,

但對資料表進行更新、刪除時,索引有可能不但不會影響作業時間,

反而提高作業效能,為什麼我會這麼說,

因為當SQL SERVER要刪除或更新資料時,

必須先找到該筆資料位置,

這時透過索引快速搜尋定位到該筆資料,

所帶來的效能往往可以彌補更新索引額外成本,

如果update、delete的where 陳述更複雜的話,所帶來的有效性將更明顯,

下面我簡單測試驗證該論點,你將看到索引為資料更新、刪除所帶來的好處。

 

未建立索引執行delete、update 操作

 


drop table mytbl 
create table mytbl
(
c1 int identity(1,1),
c2 datetime default getdate(),
c3 varchar(50)
)

--insert 10000 
insert into mytbl(c3) 
select top(10000) CarrierTrackingNumber from AdventureWorks2008.dbo.SalesOrderDetail  

--delete 10
delete mytbl
where c1=10  

image

delete 操作花費 I/O。

 


--update
update mytbl
set c2='2013-01-15 14:22:22'
where c1=100

image

update 操作花費 I/O。

 

 

 

建立clustered index on c1

執行同樣操作


drop table mytbl 
create table mytbl
(
c1 int identity(1,1),
c2 datetime default getdate(),
c3 varchar(50)
)

--insert 10000 
insert into mytbl(c3) 
select top(10000) CarrierTrackingNumber from AdventureWorks2008.dbo.SalesOrderDetail  

--create clustered index
create clustered index cidx on mytbl(c1) 

--delete 10
delete mytbl
where c1=10  

image

delete 操作花費 I/O。

 


--update
update mytbl
set c2='2013-01-15 14:22:22'
where c1=100

image

update 操作花費 I/O。

 

 

 

效能比較表

  Delete Update
未建立索引 I/O:42 ,  經過時間:3ms I/O:42 ,  經過時間:22ms
建立索引 I/O:2 ,  經過時間:0ms I/O:2 ,  經過時間:0ms

 

 

建立 clustered index後,delete、update操作I/O大大減少,同時也改善整體資料操作時間,

透過這小小驗證,相信會改變你對索引影響資料操作負面刻板印象。