[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
delete 操作花費 I/O。
--update
update mytbl
set c2='2013-01-15 14:22:22'
where c1=100
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
delete 操作花費 I/O。
--update
update mytbl
set c2='2013-01-15 14:22:22'
where c1=100
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大大減少,同時也改善整體資料操作時間,
透過這小小驗證,相信會改變你對索引影響資料操作負面刻板印象。