J'ai une question générale concernant les index de table sur les clés étrangères dans la modélisation de base de données. Si j'ai une table, TABLE_A, créé comme:Clés et indicateurs étrangers 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])
et Table_B comme:
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]
aura-t-il dans la pratique plus efficace si je crée un index sur la table de référence (tableau A) référence colonne (RelatedTableBID)? Comme dans:
CREATE INDEX TABLE_A_FK_INDEX1 on TABLE_A(RelatedTableBID)
Ou est-ce que je pense à cela à l'envers? Il semble que puisque la colonne référencée est elle-même un index clusterisé, il ne devrait pas y avoir de problèmes lors des jointures - si ce n'est que les suppressions de TABLE_B semblent susceptibles de mauvaises performances.
Merci pour toute aide pour me mettre en ligne.
-Mustafa
EDIT
Donc, en général, si je suis toujours ou se joindre à l'aide d'une colonne dans une clause where cohérente lors de l'interrogation, dois-je ajouter un index sur elle? What are some best practices and "rules of thumb" for creating database indexes? On dirait que c'est une décision généralement saine.
Je ne sais pas si vous vouliez dire cela pour une autre question - je pense que Joe Stefanelli m'a mis droit cependant. – Mustafakidd