SQL Server聚簇索引在非唯一列上

时间:2017-04-04 18:32:15

标签: sql sql-server indexing locking blocking

在我的示例中,我有两个表,它们通过第一个(主)表的主键相互关联。第二个表可以有多行与第一个(主)表相关。在我的真实世界的例子中,我有成千上万的行被数千个客户端同时选择,更新,插入和删除。由于并发更新和选择,我遇到的问题是锁定。

将与主表关联的非唯一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

1 个答案:

答案 0 :(得分:1)

理想情况下,第二个表将具有唯一的主键,该主键将作为聚簇索引服务(这可以是列的组合)。如果该值不是唯一的,我会使用非聚集索引,这应该有所帮助。