我的数据库中有几个表是父子关系。例如:
CREATE TABLE [dbo].[cntnr_header]
(
[cntnr_id] [dbo].[uid] NOT NULL,
CONSTRAINT [pk_cntnr_header] PRIMARY KEY CLUSTERED ([cntnr_id] ASC),
);
CREATE TABLE [dbo].[cntnr_content]
(
[cntnr_content_id] [dbo].[uid] NOT NULL,
[cntnr_id] [dbo].[uid] NOT NULL,
CONSTRAINT [pk_cntnr_content]
PRIMARY KEY CLUSTERED ([cntnr_content_id] ASC),
CONSTRAINT [fk_cntnr_content_cntnr_header]
FOREIGN KEY ([cntnr_id])
REFERENCES [dbo].[cntnr_header] ([cntnr_id]),
);
目前,如您所见,cntnr_id
表中的外键上没有索引cntnr_content
。cntnr_content_id
我运行了调优向导,实际上我看到它建议为两者和cntnr_id
表添加一个非聚集索引cntnr_content
。我不太明白这一点,因为cntnr_content_id
已经是聚集索引。为什么会推荐这样的索引?
CREATE NONCLUSTERED INDEX [_dta_index_cntnr_content_7_821577965__K1_K2] ON [dbo].[cntnr_content]
(
[cntnr_content_id] ASC,
[cntnr_id] ASC
)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
我认为我可能应该cntnr_id
在此表中添加一个非聚集索引。
这种情况有推荐的做法吗?我是否应该始终添加具有此类关系的某些索引?
许多查询要么将这两个表连接在一起,cntnr_id
要么cntnr_content
通过指定cntnr_id
. 这也是一个更新/删除重表。更新和删除总是在主键 ( cntnr_content_id
) 上完成。