簡體   English   中英

將添加非聚集索引鎖定我的表嗎?

[英]Will adding a nonclustered index lock my table?

我有一個包含大約200萬條記錄的表,我需要向uniqueidentifier添加一個新的非聚簇索引,以提高查詢性能。

添加非聚集索引是否會鎖定表格,否則會在應用時顯着降低性能?

有很多關於索引的好處/缺陷的信息,但我找不到任何告訴我索引操作期間發生的事情

我正在運行SQL Server 2008 R2(在Windows Server 2008上,如果這很重要)

編輯:這是企業版

對於我們這些沒有運行“昂貴版”(企業版)的人來說,答案是這樣的:

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

所以基本上它在構建索引時呈現目標表“只讀”。 對於您的覆蓋應用程序,這可能是也可能不是問題 - 請與您的開發團隊和用戶核實!

PS: 應用這樣一個索引是否或為什么的問題是一個完全不同的對話。 SQL社區及其專業博主和中小企業團隊是您的朋友。

在Enterprise Edition中,您可以進行在線索引操作。 它看起來像這樣:

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

請注意,該操作在此過程中(在開始和結束時,IIRC)仍然會執行某些鎖定,但在創建索引期間不會鎖定表。 如果您擔心,請在非生產環境中啟動擴展事件會話,並在創建索引時跟蹤創建的鎖以及它們存在的時間。

更新:該文檔非常好地闡述了在線和離線操作時鎖定的內容。

取決於(很多事情)作為經驗法則添加索引,改善選擇和降低插入。 uniqueidentifier基本上是一個大小固定的隨機短語,由於它,索引病態可以快速碎片化。

對於插入,它會在行級別獲得獨占鎖定(這是正確的,因為該行正在“構建”)和頁面級別或表級別的軟鎖(我不是100%肯定它,嘗試文檔,但你得到了理念)。

軟鎖不是問題,具體取決於您的隔離級別(以及應用於選擇的提示)。 如果你使用一個非常具有限制性的隔離級別(這會使得這個問題很難受到尊重)可能會成為一個問題

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM