Esta pregunta trata sobre la efectividad de una técnica de indexación de SQL Server. Creo que se conoce como "intersección de índice".
Estoy trabajando con una aplicación existente de SQL Server (2008) que tiene una serie de problemas de rendimiento y estabilidad. Los desarrolladores hicieron algunas cosas extrañas con la indexación. No he podido obtener puntos de referencia concluyentes sobre estos temas, ni puedo encontrar ninguna documentación realmente buena en Internet.
Hay muchas columnas de búsqueda en una tabla. Los desarrolladores crearon un índice de una sola columna en CADA una de las columnas de búsqueda. La teoría era que SQL Server podría combinar (intersectar) cada uno de estos índices para acceder de manera eficiente a la tabla en la mayoría de las circunstancias. Aquí hay un ejemplo simplificado (la tabla real tiene más campos):
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
Creo que los índices de múltiples columnas dirigidos a criterios de búsqueda son mucho mejores, pero puedo estar equivocado. He visto planes de consulta que muestran que SQL Server hace una coincidencia hash en dos búsquedas de índice. ¿Quizás esto tiene sentido cuando no sabes cómo se busca en la tabla? Gracias.