Questa domanda riguarda l'efficacia di una tecnica di indicizzazione di SQL Server. Penso che sia noto come "intersezione dell'indice".
Sto lavorando con un'applicazione esistente di SQL Server (2008) che presenta numerosi problemi di prestazioni e stabilità. Gli sviluppatori hanno fatto alcune cose strane con l'indicizzazione. Non sono stato in grado di ottenere parametri di riferimento conclusivi su questi problemi, né posso trovare alcuna documentazione davvero buona su Internet.
Esistono molte colonne ricercabili su una tabella. Gli sviluppatori hanno creato un indice a colonna singola su OGNI colonna ricercabile. La teoria era che SQL Server sarebbe stato in grado di combinare (intersecare) ciascuno di questi indici per accedere in modo efficiente alla tabella nella maggior parte dei casi. Ecco un esempio semplificato (la tabella reale ha più campi):
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
Penso che gli indici a più colonne mirati ai criteri di ricerca siano molto migliori, ma potrei sbagliarmi. Ho visto piani di query che mostrano che SQL Server esegue una corrispondenza hash su due ricerche di indice. Forse questo ha senso quando non sai come viene cercata la tabella? Grazie.