Eu tenho um banco de dados de terceiros no qual um grande número de tabelas tem uma coluna 'companyID' e a maioria das consultas nessas tabelas inclui companyID = @companyID
a cláusula where.
[ EDIT: Além da cláusula where, o companyID geralmente também é usado na cláusula order by da maioria das consultas: por exemplo order by companyId, otherField1, otherField2 etc..
]
Em nossa organização, a coluna companyID é sempre preenchida com 1 (embora haja uma chance externa de mudar em algum momento no futuro).
Agora estou procurando criar alguns índices nessas tabelas. O SQL Server recomenda alguns 'índices ausentes' e todas as recomendações contêm o campo companyID como a primeira coluna do índice.
Seguindo o princípio de especificar a coluna mais seletiva primeiro, eu pensaria que deveria colocar a coluna companyID por último, ou talvez nem mesmo tê-la no índice. Mas então estou me perguntando por que a exibição de índices ausentes do SQL Server sempre sugere colocá-la em primeiro lugar - certamente o SQL Server é inteligente o suficiente para saber que cada linha contém o mesmo valor para essa coluna?
O SQL Server só conhece o conteúdo da coluna se você estiver criando um índice ou uma estatística para esta coluna. Se o companyID for sempre preenchido com 1, você nunca deseja criar um índice para ele - nem mesmo como a última parte de um índice de várias colunas. Os índices recomendados às vezes são estúpidos e devem ser considerados como palpites.