2017-04-04 92 views
0

在我的示例中,我有兩個通過第一個(主)表的主鍵相互關聯的表。第二個表可以有多行與第一個(主)表相關聯。在我的真實世界的例子中,我有成千上萬的行同時被數千個客戶選中,更新,插入和刪除。我遇到的問題是鎖定,因爲併發更新和選擇。非唯一列上的SQL Server聚簇索引

將非唯一ID列與主表相關聯的聚集索引幫助我的情況呢?

表結構:

wks_master: wks_master_id [primary key], other_columns.... 
wks_std_apps: wks_std_apps_id [primary key], wks_master_id, other_columns.... 

查詢通常如下所示:

select * 
from wks_std_apps 
where wks_master_id = @wks_master_id 

update wks_std_apps 
set blah... 
where wks_master_id = @wks_master_id 
+0

它應該 - 如果列索引,選擇和更新都能夠更快地找到給定「wks_master_id」的行。不過,它不需要羣集。 – user1935361

+0

有沒有當前的聚集索引?如果是這樣,它是唯一的嗎? –

回答

1

理想地,第二表將具有唯一的主密鑰將服務器作爲羣集索引(這可以是一個組合列)。如果該值不唯一,我會使用非聚集索引,這應該有所幫助。

+0

添加非聚集索引立即解決了問題。插入/更新/刪除有點懲罰,但選擇是這個數據庫絕大多數交易。 –