SQL Server:我可以创建一个没有索引或约束检查开销的"合成"关系吗?

Ton*_*gan 1 sql sql-server foreign-key-relationship relational-database

我希望做的是确保在数据库模式中维护外键关系,但出于性能原因,不强制执行约束或产生任何索引开销.它的目的纯粹是为了记录这种关系.这通常被称为"合成关系".

Mar*_*ith 5

SQL Server中没有FK的索引开销,因为它没有为它们创建默认索引.

您可以通过禁用FK来实现关于约束检查所需的功能.

CREATE TABLE T1
(
C1 INT PRIMARY KEY
)

CREATE TABLE T2
(
C1 INT 
)

/*Add FK without checking existing data*/
ALTER TABLE T2  WITH NOCHECK ADD  CONSTRAINT FK_T2_C1 FOREIGN KEY(C1)
REFERENCES T1 (C1)

/*Prevent checking of future data*/
ALTER TABLE T2 NOCHECK CONSTRAINT FK_T2_C1
Run Code Online (Sandbox Code Playgroud)

除了确保数据完整性外,优化器还可以使用外键约束来改进查询计划(参考:第9点)

您是否已将FK识别为导致特定性能问题?