Esta pergunta é sobre a eficácia de uma técnica de indexação do SQL Server. Eu acho que é conhecido como "interseção de índice".
Estou trabalhando com um aplicativo existente do SQL Server (2008) que possui vários problemas de desempenho e estabilidade. Os desenvolvedores fizeram algumas coisas estranhas com a indexação. Não fui capaz de obter referências conclusivas sobre essas questões, nem posso encontrar uma documentação realmente boa sobre os internets.
Existem muitas colunas pesquisáveis em uma tabela. Os desenvolvedores criaram um índice de coluna única em CADA das colunas pesquisáveis. A teoria era que o SQL Server seria capaz de combinar (cruzar) cada um desses índices para acessar com eficiência a tabela na maioria das circunstâncias. Aqui está um exemplo simplificado (a tabela real possui mais 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
Acho que vários índices de coluna direcionados aos critérios de pesquisa são muito melhores, mas posso estar errado. Vi planos de consulta que mostram o SQL Server fazendo uma correspondência de hash em duas pesquisas de índice. Talvez isso faça sentido quando você não sabe como a tabela é pesquisada? Obrigado.