我正在使用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