выпуск внешнего ключа и индекса - PullRequest
2 голосов
/ 05 июня 2010

Я использую SQL Server 2008 Enterprise. У меня есть таблица, и один из ее столбцов ссылается на другой столбец в другой таблице (в той же базе данных) как внешний ключ, вот соответствующий оператор SQL, более подробно, столбец [AnotherID] в таблице [Foo] относится к другому Столбец [Goo] таблицы [GID] в качестве внешнего ключа. [GID] является первичным ключом и кластеризованным индексом в таблице [Goo].

Мой вопрос, таким образом, если я не буду явно создавать индекс для столбца [AnotherID] в [Foo], будет ли автоматически создан индекс для столбца [AnotherID] в [Foo] - потому что его внешний ключ в столбце ссылок [GID] таблицы [Goo] уже есть индекс первичного кластерного ключа?

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]

спасибо заранее, George

Ответы [ 2 ]

6 голосов
/ 05 июня 2010

Нет. SQL Server не создает и никогда автоматически не создает индексы для столбцов внешнего ключа. Это широко распространенный городской миф - но это не более того - миф.

Но это общепринятая лучшая практика - так что это одна из самых основных рекомендаций по настройке индекса - ставьте индексы в столбцы внешнего ключа.

См. Превосходные данные Кимберли Триппа Когда SQL Server прекратил помещать индексы в столбцы внешнего ключа? сообщение в блоге для получения дополнительной справочной информации.

2 голосов
/ 05 июня 2010

Нет, индекс не будет создан, вы должны сделать это самостоятельно

...