Eu tenho um banco de dados onde eu corro profiler econsultor de banco de dados para melhorar o desempenho do banco de dados. Eu fiz e até agora tudo bem, o consultor me apresentou muitos índices e estatísticas que podem ser criados para obter melhor desempenho. Mas, lendo as declarações, me deparei com isso:
CREATE NONCLUSTERED INDEX [_dta_index_xinfobaseacl_11_397426127__K3_K7_K1_K5] ON [dbo].[xinfobaseacl]
(
[lviewid] ASC,
[lparentid] ASC,
[lid] ASC,
[xlactor] ASC
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
go
CREATE NONCLUSTERED INDEX [_dta_index_xinfobaseacl_11_397426127__K7_K5_K1_K3] ON [dbo].[xinfobaseacl]
(
[lparentid] ASC,
[xlactor] ASC,
[lid] ASC,
[lviewid] ASC
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
go
Mesma tabela, mesmas colunas, mesmos parâmetros, apenas outra ordem de classificação das colunas ...
Então, eu estou confuso, a ordem de classificação realmente importa na criação do índice ???
Respostas:
2 para resposta № 1Sim, a ordem das colunas em um índice composto é importante.
Ambos funcionarão igualmente bem para um predicado de igualdade nas 4 colunas.
Mas o primeiro também oferece suporte a consultas como
WHERE lviewid = 1 AND lparentid 1 AND lid = 1
ORDER BY xlactor
E o segundo suportará consultas como
WHERE parentid = 1 AND xlactor = 1
ORDER BY lid, xlactor
A criação ou não de ambos os índices depende da sua carga de trabalho. Você alimentou o DTA com uma carga de trabalho representativa, incluindo instruções de modificação de dados?
1 para resposta № 2
Você está confundindo terminologias. A ordem de classificação não afeta muito, se houver, mas a ordem das colunas no índice pode ser importante.
A ordem correta das colunas para um índice composto depende da sua consulta, mas como regra geral, a coluna com o menor número de valores diferentes deve ser a primeira.