经过昨天的帖,让我掌握了寻找缺失索引的一般性方法。
现在再请教另外的问题:(假设业务数据的数量级在千万以上,基础数据的数量级在几千到几万条记录之间)1、针对大数据量的索引,是不是要按单个字段来建立?
    现象:整理昨天的索引的时候,其中有个外键涉及到的表其实是没有数据的,如下面脚本中的TableD的逻辑关系,我要删除的表类似TableE,其实tableD中并没有我要删除的E中所关联的数据,因为D中的数据已经用其它SQL语句删掉了。D的索引有建立,也包含了TE这个字段,只是混合在接近10个字段共同组合的索引之中,删除速度很慢,我用了【执行计划】查看,发现是这个表花费了很长时间,试着把索引拆开,速度就很快了。
2、级联删除是否能够提升涉及外键的删除速度?
    假如TableD中的TE不建立索引,使用级联删除能提升速度不?3、针对下面的脚本中的表结构,我要删除TableE的数据,如何使用级联删除?Visio图在后面。CREATE TABLE [dbo].[TableA](
[TA] [int] NOT NULL,
[TAName] [varchar](10) NULL,
 CONSTRAINT [TableA_PK] PRIMARY KEY CLUSTERED 
(
[TA] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[TableB](
[TB] [int] NOT NULL,
[TBName] [varchar](10) NULL,
 CONSTRAINT [TableB_PK] PRIMARY KEY CLUSTERED 
(
[TB] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[TableC](
[TC] [int] NOT NULL,
[TCName] [varchar](10) NULL,
 CONSTRAINT [TableC_PK] PRIMARY KEY CLUSTERED 
(
[TC] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[TableD](
[TD] [int] NOT NULL,
[TDName] [varchar](10) NULL,
[TC] [int] NULL,
[TA] [int] NULL,
[TE] [int] NULL,
 CONSTRAINT [TableD_PK] PRIMARY KEY CLUSTERED 
(
[TD] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[TableE](
[TE] [int] NOT NULL,
[TEName] [varchar](10) NULL,
[TA] [int] NULL,
[TB] [int] NULL,
[TC] [int] NULL,
 CONSTRAINT [TableE_PK] PRIMARY KEY CLUSTERED 
(
[TE] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[TableF](
[TF] [int] NOT NULL,
[TFName] [varchar](10) NULL,
[TD] [int] NULL,
[TE] [int] NULL,
[TC] [int] NULL,
[TB] [int] NULL,
[TA] [int] NULL,
 CONSTRAINT [TableF_PK] PRIMARY KEY CLUSTERED 
(
[TF] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[TableD]  WITH CHECK ADD  CONSTRAINT [TableA_TableD_FK1] FOREIGN KEY([TA])
REFERENCES [dbo].[TableA] ([TA])
GO
ALTER TABLE [dbo].[TableD] CHECK CONSTRAINT [TableA_TableD_FK1]
GO
ALTER TABLE [dbo].[TableD]  WITH CHECK ADD  CONSTRAINT [TableC_TableD_FK1] FOREIGN KEY([TC])
REFERENCES [dbo].[TableC] ([TC])
GO
ALTER TABLE [dbo].[TableD] CHECK CONSTRAINT [TableC_TableD_FK1]
GO
ALTER TABLE [dbo].[TableD]  WITH CHECK ADD  CONSTRAINT [TableE_TableD_FK1] FOREIGN KEY([TE])
REFERENCES [dbo].[TableE] ([TE])
GO
ALTER TABLE [dbo].[TableD] CHECK CONSTRAINT [TableE_TableD_FK1]
GO
ALTER TABLE [dbo].[TableE]  WITH CHECK ADD  CONSTRAINT [TableA_TableE_FK1] FOREIGN KEY([TA])
REFERENCES [dbo].[TableA] ([TA])
GO
ALTER TABLE [dbo].[TableE] CHECK CONSTRAINT [TableA_TableE_FK1]
GO
ALTER TABLE [dbo].[TableE]  WITH CHECK ADD  CONSTRAINT [TableB_TableE_FK1] FOREIGN KEY([TB])
REFERENCES [dbo].[TableB] ([TB])
GO
ALTER TABLE [dbo].[TableE] CHECK CONSTRAINT [TableB_TableE_FK1]
GO
ALTER TABLE [dbo].[TableE]  WITH CHECK ADD  CONSTRAINT [TableC_TableE_FK1] FOREIGN KEY([TC])
REFERENCES [dbo].[TableC] ([TC])
GO
ALTER TABLE [dbo].[TableE] CHECK CONSTRAINT [TableC_TableE_FK1]
GO
ALTER TABLE [dbo].[TableF]  WITH CHECK ADD  CONSTRAINT [TableA_TableF_FK1] FOREIGN KEY([TA])
REFERENCES [dbo].[TableA] ([TA])
GO
ALTER TABLE [dbo].[TableF] CHECK CONSTRAINT [TableA_TableF_FK1]
GO
ALTER TABLE [dbo].[TableF]  WITH CHECK ADD  CONSTRAINT [TableB_TableF_FK1] FOREIGN KEY([TB])
REFERENCES [dbo].[TableB] ([TB])
GO
ALTER TABLE [dbo].[TableF] CHECK CONSTRAINT [TableB_TableF_FK1]
GO
ALTER TABLE [dbo].[TableF]  WITH CHECK ADD  CONSTRAINT [TableC_TableF_FK1] FOREIGN KEY([TC])
REFERENCES [dbo].[TableC] ([TC])
GO
ALTER TABLE [dbo].[TableF] CHECK CONSTRAINT [TableC_TableF_FK1]
GO
ALTER TABLE [dbo].[TableF]  WITH CHECK ADD  CONSTRAINT [TableD_TableF_FK1] FOREIGN KEY([TD])
REFERENCES [dbo].[TableD] ([TD])
GO
ALTER TABLE [dbo].[TableF] CHECK CONSTRAINT [TableD_TableF_FK1]
GO
ALTER TABLE [dbo].[TableF]  WITH CHECK ADD  CONSTRAINT [TableE_TableF_FK1] FOREIGN KEY([TE])
REFERENCES [dbo].[TableE] ([TE])
GO
ALTER TABLE [dbo].[TableF] CHECK CONSTRAINT [TableE_TableF_FK1]
GOINSERT [dbo].[TableA] ([TA], [TAName]) VALUES (1, N'A1')
GO
INSERT [dbo].[TableA] ([TA], [TAName]) VALUES (2, N'A2')
GO
INSERT [dbo].[TableA] ([TA], [TAName]) VALUES (3, N'A3')
GO
INSERT [dbo].[TableC] ([TC], [TCName]) VALUES (1, N'C1')
GO
INSERT [dbo].[TableC] ([TC], [TCName]) VALUES (2, N'C2')
GO
INSERT [dbo].[TableC] ([TC], [TCName]) VALUES (3, N'C3')
GO
INSERT [dbo].[TableB] ([TB], [TBName]) VALUES (1, N'B1')
GO
INSERT [dbo].[TableB] ([TB], [TBName]) VALUES (2, N'B2')
GO
INSERT [dbo].[TableB] ([TB], [TBName]) VALUES (3, N'B3')
GO
INSERT [dbo].[TableE] ([TE], [TEName], [TA], [TB], [TC]) VALUES (1, N'E1', 1, 1, 1)
GO
INSERT [dbo].[TableE] ([TE], [TEName], [TA], [TB], [TC]) VALUES (2, N'E2', 2, 2, 2)
GO
INSERT [dbo].[TableE] ([TE], [TEName], [TA], [TB], [TC]) VALUES (3, N'E3', 3, 3, 3)
GO
INSERT [dbo].[TableD] ([TD], [TDName], [TC], [TA], [TE]) VALUES (1, N'D1', 1, 1, 1)
GO
INSERT [dbo].[TableD] ([TD], [TDName], [TC], [TA], [TE]) VALUES (2, N'D2', 2, 2, 2)
GO
INSERT [dbo].[TableD] ([TD], [TDName], [TC], [TA], [TE]) VALUES (3, N'D3', 3, 3, 3)
GO
INSERT [dbo].[TableF] ([TF], [TFName], [TD], [TE], [TC], [TB], [TA]) VALUES (1, N'F1', 1, 1, 1, 1, 1)
GO
INSERT [dbo].[TableF] ([TF], [TFName], [TD], [TE], [TC], [TB], [TA]) VALUES (2, N'F2', 2, 2, 2, 2, 2)
GO
INSERT [dbo].[TableF] ([TF], [TFName], [TD], [TE], [TC], [TB], [TA]) VALUES (3, N'F3', 3, 3, 3, 3, 3)
GO索引外键 删除