2014-02-28 26 views
3

我有一個大約200萬條記錄的表格,我需要將一個新的非聚集索引添加到uniqueidentifier以提高查詢性能。將添加非聚集索引鎖定我的表嗎?

添加非聚簇索引是否會鎖定表或以其他方式降低性能,同時顯着降低性能?

有很多在那裏關於索引的好處/陷阱的信息,但我無法找到任何東西,告訴我,在索引操作

我運行SQL Server 2008 R2發生(上Windows Server 2008中,如果這一點很重要)

編輯:這是企業版

+2

你正在使用什麼版本的SQL Server? –

+0

我認爲添加索引uniqueidentifier/guid字段沒有被利用?...我想我回答了我自己的問題:http://stackoverflow.com/questions/13803326/use-of-non-clustered-index-on- guid-type-column-in-sql-server – ganders

+0

我已經更新了這個問題 - 我們正在使用Enterprise Edition –

回答

5

在企業版中,您可以獲得進行在線索引操作的能力。它看起來是這樣的:

create index MyIDX on MyTable (MyColumn) with (online = on) 

注意,此操作不會依然走的過程(在開始和結束,IIRC)在一些鎖,但不鎖定表的索引創建的時間。如果您擔心,請在非生產環境中啓動擴展事件會話,並跟蹤創建索引時創建的鎖和創建多久的鎖。

更新:documentation有一個很好的說明什麼時候鎖定在線和離線操作。

0

取決於(上很多東西)爲拇添加索引生病提高選擇和降低刀片的規則。 一個獨特的標識符基本上是一個大小固定的隨機短語,並且由於它指示生病可以快速分片。

對於插入它生病得到排行級別的排他鎖(這是因爲該行正在「構建」),並在頁面級別或表級軟鎖(我不是100%確定它,嘗試文檔但你有這個想法)。

根據您的隔離級別(以及應用於選擇的提示),軟鎖不是問題。 這可能是一個問題,如果你使用一個非常嚴格的隔離級別(鎖定不適應該字母)

無論如何,我建議你打書,做一些酸測試。它是一個非常複雜的話題,很大程度上取決於您的特定場景。

7

對於我們這些運行「貴版」(企業),得到的答案是這樣的:

,創建一個非聚集索引的脫機索引操作上獲得 共享鎖(S)表。這樣可以防止更新 基礎表,但允許讀取操作,例如SELECT 語句。

因此,基本上它會在索引建立時呈現目標表「只讀」。這可能會或可能不會成爲您的覆蓋應用程序的問題 - 請諮詢您的開發團隊和用戶!

PS:是否適用這樣的索引是否是或者爲什麼是一個完全不同的對話。SQL社區及其專業博客隊伍&中小企業是你的朋友。