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

发布于 2024-12-02 12:44:09 字数 80 浏览 0 评论 0原文

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

What I wish to do is ensure that the foreign key relation is maintained in the database schema but for performance reasons, not enforce the constrain or incur any indexing overheads. It's purpose is purely to document the relationship. This is typically referred to as a "synthetic relation".

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

稀香 2024-12-09 12:44:09

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

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

您是否已确定 FK 导致了您的案例中的特定性能问题?

There is no indexing overhead with FKs in SQL Server as it creates no default indexes for them.

You can achieve the functionality you want with regards to constraint checking by disabling the 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

As well as ensuring data integrity foreign key constraints can also be used by the optimiser to improve query plans (Ref: Point 9)

Have you identified the FK as causing a specific performance issue in your case?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文