Cette question concerne l'efficacité d'une technique d'indexation SQL Server. Je pense que c'est connu comme "intersection d'index".
Je travaille avec une application SQL Server (2008) existante qui pose un certain nombre de problèmes de performances et de stabilité. Les développeurs ont fait des choses étranges avec l'indexation. Je n'ai pas réussi à obtenir de points de repère concluants sur ces questions, et je ne trouve pas non plus de documentation de qualité sur les internets.
Il y a beaucoup de colonnes interrogeables sur une table. Les développeurs ont créé un index de colonne unique sur CHAQUE des colonnes pouvant faire l'objet d'une recherche. La théorie était que SQL Server serait capable de combiner (intersecter) chacun de ces index pour accéder efficacement à la table dans la plupart des cas. Voici un exemple simplifié (la table réelle a plus de champs):
CREATE TABLE [dbo].[FatTable](
[id] [bigint] IDENTITY(1,1) NOT NULL,
[col1] [nchar](12) NOT NULL,
[col2] [int] NOT NULL,
[col3] [varchar](2000) NOT NULL, ...
CREATE NONCLUSTERED INDEX [IndexCol1] ON [dbo].[FatTable] ( [col1] ASC )
CREATE NONCLUSTERED INDEX [IndexCol2] ON [dbo].[FatTable] ( [col2] ASC )
select * from fattable where col1 = '2004IN'
select * from fattable where col1 = '2004IN' and col2 = 4
Je pense que plusieurs index de colonnes ciblés sur les critères de recherche sont bien meilleurs, mais je me trompe peut-être. J'ai vu des plans de requête montrant que SQL Server faisait une correspondance de hachage sur deux recherches d'index. Cela a peut-être du sens lorsque vous ne savez pas comment la table est recherchée? Merci.