我在向新创建的空表添加简单的外键约束时遇到了很多问题。参考表是一个很小的表,其中只有不到 40 条记录,但它被引用了很多。
以下是发生的情况:新表成功创建,但是在添加 FK 约束时,它“思考”了很长时间并增加了 CPU 负载。内存使用量增加,服务器开始疯狂分页并变得无响应(连接超时)。取消查询没有帮助。唯一可行的是重新启动服务器,这非常昂贵。
这是我要运行的脚本。我希望 SQL Server 专家能提供帮助。谢谢!
USE [my_db]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[MyNewTable](
[Column1ID] [int] NOT NULL,
[Column2ID] [int] NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[MyNewTable] WITH CHECK ADD CONSTRAINT [FK_MyNewTable_Column1ID] FOREIGN KEY([Column1ID])
REFERENCES [dbo].[ReferenceTable] ([Column1ID])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[MyNewTable] CHECK CONSTRAINT [FK_MyNewTable_Column1ID]
GO
编辑: ReferenceTable 是一个看起来像这样的小表:
[Column1ID] [int] IDENTITY(1,1) NOT NULL,
[TxtCol1] [varchar](50) NOT NULL,
[TxtCol2] [varchar](50) NOT NULL,
[TxtCol3] [varchar](200) NOT NULL,
[TxtCol4] [nvarchar](2000) NOT NULL,
[TxtCol5] [varchar](200) NOT NULL,
[BitCol1] [bit] NOT NULL,
[TxtCol6] [varchar](200) NOT NULL,
[NumCol1] [smallint] NOT NULL,
[ExternalColumnId] [int] NOT NULL,
[NumCol2] [int] NOT NULL
Column1ID 被其他表(FK)大量引用。ExternalColumnId 是另一个表的 FK。问题发生在 ALTER TABLE 调用之一期间。不幸的是,这两个是一起运行的,所以我无法说是哪一个引起的。
编辑:一旦数据库进入“思考”模式,就可以通过将其切换到单用户模式然后回到多用户模式来恢复它。这比重新启动服务器要好得多,但仍然不能接受。