我正在使用SQL Server 2008 Enterprise。我有一个表,其中一列是指另一个表(在同一个数据库中)与另一个表中的另一列相同的外键,这里是相关的SQL语句,更详细地说,表[Foo]中的[AnotherID]列指的是另一个表[Goo]的列[GID]作为外键。 [GID]是表[Goo]上的主键和聚簇索引。外键和索引问题
我的问题是,这样,如果我没有明确地在[Foo]的[AnotherID]列上创建索引,是否会为[Foo]上的[AnotherID]列自动创建索引 - 因为它的外部表[Goo]上的键引用列[GID]已经具有主聚簇键索引?
CREATE TABLE [dbo].[Foo](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[AnotherID] [int] NULL,
[InsertTime] [datetime] NULL CONSTRAINT DEFAULT (getdate()),
CONSTRAINT [PK_Foo] PRIMARY KEY CLUSTERED
(
[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]
ALTER TABLE [dbo].[Foo] WITH CHECK ADD CONSTRAINT [FK_Foo] FOREIGN KEY([Goo])
REFERENCES [dbo].[Goo] ([GID])
ALTER TABLE [dbo].[Foo] CHECK CONSTRAINT [FK_Foo]
由于事先 乔治
1.马克,对不起,我的英文不好。你的意思是没有为表[Foo]的[AnotherID]列创建索引,对吗? 2.所以,如果我经常使用[AnotherID]访问表[Foo],它将会非常低效,正确吗? – George2 2010-06-05 09:40:47
@ George2:纠正两个计数。 – Piskvor 2010-06-05 09:45:14
@ George2:是的,确切地说:默认情况下,SQL Server不会**在Foo.AnotherID上创建索引,是的,拥有索引可以使某些操作(连接,查找)更快。 – 2010-06-05 09:52:06