如果在单个表上定义5-6个外键,是否存在性能问题?
CREATE TABLE [dbo].[PS_CLASSROOM_MST](
[CLASS_ID] [int] NOT NULL,
[CLASS_NAME] [varchar](50) NOT NULL,
[CLIENT_ID] [int] NOT NULL,
[SCHOOL_ID] [int] NOT NULL,
[COURSE_ID] [int] NULL,
[BRANCH_ID] [int] NOT NULL,
[SESSION_ID] [int] NOT NULL,
[SECTION] [varchar](10) NULL,
[STATUS] [bit] NOT NULL,
[IP_ADDRESS] [varchar](30) NULL,
[LANGUAGE] [varchar](50) NULL,
[CLASS_FILE_PATH] [varchar](200) NULL,
[REMARK] [nvarchar](max) NULL,
[SECTION_FILE_PATH] [nvarchar](max) NULL,
[LOCATION_ID] [int] NOT NULL,
CONSTRAINT [PK_PS_CLASSROOM_MST] PRIMARY KEY CLUSTERED
(
[CLASS_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[PS_CLASSROOM_MST] WITH CHECK ADD CONSTRAINT [FK_PS_CLASSROOM_MST_PS_BRANCH_MST] FOREIGN KEY([BRANCH_ID])
REFERENCES [dbo].[PS_BRANCH_MST] ([BRANCH_ID])
GO
ALTER TABLE [dbo].[PS_CLASSROOM_MST] CHECK CONSTRAINT [FK_PS_CLASSROOM_MST_PS_BRANCH_MST]
GO
ALTER TABLE [dbo].[PS_CLASSROOM_MST] WITH CHECK ADD CONSTRAINT [FK_PS_CLASSROOM_MST_PS_COURSE_MST] FOREIGN KEY([COURSE_ID])
REFERENCES [dbo].[PS_COURSE_MST] ([COURSE_ID])
GO
ALTER TABLE [dbo].[PS_CLASSROOM_MST] CHECK CONSTRAINT [FK_PS_CLASSROOM_MST_PS_COURSE_MST]
GO
ALTER TABLE [dbo].[PS_CLASSROOM_MST] WITH CHECK ADD CONSTRAINT [FK_PS_CLASSROOM_MST_PS_LOCATION] FOREIGN KEY([LOCATION_ID])
REFERENCES [dbo].[PS_LOCATION] ([LOCATION_ID])
GO
ALTER TABLE [dbo].[PS_CLASSROOM_MST] CHECK CONSTRAINT [FK_PS_CLASSROOM_MST_PS_LOCATION]
GO
ALTER TABLE [dbo].[PS_CLASSROOM_MST] WITH CHECK ADD CONSTRAINT [FK_PS_CLASSROOM_MST_PS_SCHOOL_MST] FOREIGN KEY([SCHOOL_ID])
REFERENCES [dbo].[PS_SCHOOL_MST] ([SCHOOL_ID])
GO
ALTER TABLE [dbo].[PS_CLASSROOM_MST] CHECK CONSTRAINT [FK_PS_CLASSROOM_MST_PS_SCHOOL_MST]
GO
ALTER TABLE [dbo].[PS_CLASSROOM_MST] WITH CHECK ADD CONSTRAINT [FK_PS_CLASSROOM_MST_PS_SESSION_MST1] FOREIGN KEY([SESSION_ID])
REFERENCES [dbo].[PS_SESSION_MST] ([SESSION_ID])
GO
ALTER TABLE [dbo].[PS_CLASSROOM_MST] CHECK CONSTRAINT [FK_PS_CLASSROOM_MST_PS_SESSION_MST1]
GO发布于 2016-03-09 10:56:32
外键的存在是为了加强引用完整性,即保持数据的干净。这是件好事。
然而,没有免费午餐。该约束将在写入时进行检查,从而增加延迟。FK可能有一个相关的索引。因此,在写过程中会有开销。FKs越多,开销越大。加上额外的磁盘和维护时间。
如果你已经做了辛勤的设计,并来到这张桌子,那么我看不出主要的面对问题。如果规模测试显示问题,那么就需要考虑其他实现。
https://dba.stackexchange.com/questions/131274
复制相似问题