Mar*_*o G 9 foreign-key sql-server sql-server-2014
我有这样的事情:
CREATE TABLE T1 (
Id INT
...
,Constraint [PK_T1] PRIMARY KEY CLUSTERED [Id]
)
CREATE TABLE T2 (
....
,T1_Id INT NOT NULL
,CONSTRAINT [FK_T2_T1] FOREIGN KEY (T1_Id) REFERENCES T1(Id)
)
Run Code Online (Sandbox Code Playgroud)
出于性能(和死锁)原因,我在 T1 上创建了一个新索引
CREATE UNIQUE NONCLUSTERED INDEX IX_T1_Id ON T1 (Id)
Run Code Online (Sandbox Code Playgroud)
但是如果我检查哪个索引引用了 FK,就会继续引用聚集索引
select
ix.index_id,
ix.name as index_name,
ix.type_desc as index_type_desc,
fk.name as fk_name
from sys.indexes ix
left join sys.foreign_keys fk on
fk.referenced_object_id = ix.object_id
and fk.key_index_id = ix.index_id
and fk.parent_object_id = object_id('T2')
where ix.object_id = object_id('T1');
Run Code Online (Sandbox Code Playgroud)
如果我删除约束并再次创建它引用非聚集索引,但这会导致再次检查所有 t2 FK。
有没有办法改变这一点,以便 FK_T2_T1 使用 IX_T1_Id 而不是 PK_T1 而不删除 FK 并在 FK 检查时锁定表?
谢谢!
归档时间: |
|
查看次数: |
175 次 |
最近记录: |