我正在使用 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]
提前致谢,
乔治
不会。SQL Server 不会也从来不会在外键列上自动创建索引。这是一个广泛流传的都市神话——但也仅此而已——一个神话。
但这是一种公认的最佳实践 - 因此这是索引调整的最基本建议之一 - 将索引放在外键列上。
看看 Kimberly Tripp 的出色表现SQL Server 何时停止在外键列上放置索引? http://www.sqlskills.com/blogs/kimberly/post/When-did-SQL-Server-stop-putting-indexes-on-Foreign-Key-columns.aspx博客文章了解更多背景信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)