我有一個關於數據庫建模中外鍵表索引的常見問題。如果我有一個表,TABLE_A,創建爲:SQL Server 2005外鍵和索引
CREATE TABLE [dbo].[TABLE_A](
[ID] [int] IDENTITY(1,1) NOT NULL,
[RelatedTableBID] [int] NOT NULL,
CONSTRAINT [PK__TABLE_A] 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].[TABLE_A] WITH CHECK
ADD CONSTRAINT [TABLE_A__RelatedTableB]
FOREIGN KEY([RelatedTableBID])
REFERENCES [dbo].[TABLE_B] ([ID])
和表-B爲:
CREATE TABLE [dbo].[TABLE_B](
[ID] [int] IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK__TABLE_B] 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]
它實際上將更加有效,如果我創建在引用表的索引(表一)引用列(RelatedTableBID)?如在:
CREATE INDEX TABLE_A_FK_INDEX1 on TABLE_A(RelatedTableBID)
還是我在想這個倒退?看起來,由於被引用的列本身就是一個聚集索引,所以在連接期間不應該有任何問題 - 如果有的話,只從TABLE_B刪除似乎容易受到糟糕的性能影響。
感謝您的任何幫助,讓我挺身而出。
-Mustafa
編輯
因此,在一般情況下,如果我曾經參加上或使用列在where子句一致查詢的時候,我應該考慮增加它的指數? What are some best practices and "rules of thumb" for creating database indexes?聽起來像這是一個普遍合理的決定。
不知道你的意思是這樣的一個問題 - 我認爲喬·斯特凡內利有我設置直接。 – Mustafakidd 2010-12-14 23:35:04