我有一個大約200萬條記錄的表格,我需要將一個新的非聚集索引添加到uniqueidentifier以提高查詢性能。將添加非聚集索引鎖定我的表嗎?
添加非聚簇索引是否會鎖定表或以其他方式降低性能,同時顯着降低性能?
有很多在那裏關於索引的好處/陷阱的信息,但我無法找到任何東西,告訴我,在索引操作
我運行SQL Server 2008 R2發生(上Windows Server 2008中,如果這一點很重要)
編輯:這是企業版
我有一個大約200萬條記錄的表格,我需要將一個新的非聚集索引添加到uniqueidentifier以提高查詢性能。將添加非聚集索引鎖定我的表嗎?
添加非聚簇索引是否會鎖定表或以其他方式降低性能,同時顯着降低性能?
有很多在那裏關於索引的好處/陷阱的信息,但我無法找到任何東西,告訴我,在索引操作
我運行SQL Server 2008 R2發生(上Windows Server 2008中,如果這一點很重要)
編輯:這是企業版
在企業版中,您可以獲得進行在線索引操作的能力。它看起來是這樣的:
create index MyIDX on MyTable (MyColumn) with (online = on)
注意,此操作不會依然走的過程(在開始和結束,IIRC)在一些鎖,但不鎖定表的索引創建的時間。如果您擔心,請在非生產環境中啓動擴展事件會話,並跟蹤創建索引時創建的鎖和創建多久的鎖。
更新:documentation有一個很好的說明什麼時候鎖定在線和離線操作。
取決於(上很多東西)爲拇添加索引生病提高選擇和降低刀片的規則。 一個獨特的標識符基本上是一個大小固定的隨機短語,並且由於它指示生病可以快速分片。
對於插入它生病得到排行級別的排他鎖(這是因爲該行正在「構建」),並在頁面級別或表級軟鎖(我不是100%確定它,嘗試文檔但你有這個想法)。
根據您的隔離級別(以及應用於選擇的提示),軟鎖不是問題。 這可能是一個問題,如果你使用一個非常嚴格的隔離級別(鎖定不適應該字母)
無論如何,我建議你打書,做一些酸測試。它是一個非常複雜的話題,很大程度上取決於您的特定場景。
對於我們這些不運行「貴版」(企業),得到的答案是這樣的:
,創建一個非聚集索引的脫機索引操作上獲得 共享鎖(S)表。這樣可以防止更新 基礎表,但允許讀取操作,例如SELECT 語句。
因此,基本上它會在索引建立時呈現目標表「只讀」。這可能會或可能不會成爲您的覆蓋應用程序的問題 - 請諮詢您的開發團隊和用戶!
PS:是否適用這樣的索引是否是或者爲什麼是一個完全不同的對話。SQL社區及其專業博客隊伍&中小企業是你的朋友。
你正在使用什麼版本的SQL Server? –
我認爲添加索引uniqueidentifier/guid字段沒有被利用?...我想我回答了我自己的問題:http://stackoverflow.com/questions/13803326/use-of-non-clustered-index-on- guid-type-column-in-sql-server – ganders
我已經更新了這個問題 - 我們正在使用Enterprise Edition –