Eu estava lendo este use-the-index-luke.com, que explica em detalhes como os índices funcionam. Uma das coisas que essa pessoa reiterou é que a ordem dos índices é muito importante e, para agilizar a consulta, as colunas da cláusula where devem ser as mesmas do índice. Hoje, eu estava apenas corroborando essa teoria e criei uma tabela (id int, nome nvarchar (100)) no SQL Server 2008. Insirai 5000 linhas e criei um índice
create index abc on test (name, id )
e disparou a consulta
select ID, name
from test
where ID = 10
and name = '10'
Eu esperava que uma verificação completa da tabela fosse seguida por uma seleção no plano de consulta, mas, para minha surpresa, a saída do plano foi uma verificação de índice seguida pelo select.
Portanto, minha pergunta é: a ordem das colunas na cláusula Where é importante ou o SQL Server as reorganiza de acordo com a definição do índice?
Obrigado !!
fonte
Respostas:
Não. A ordem das colunas na
WHERE
cláusula não importa.fonte
Primeiro, a
DROP
instrução na janela de consulta claramente não foi executada, mas, por uma questão de explicação, tentarei abordar o que você pediu.Pense nos índices como você faria em uma lista telefônica: as entradas são classificadas por Sobrenome e depois por Nome. (Esta é a ordem das chaves de índice .)
Se eu pedir para você encontrar todos os números de telefone de pessoas com o sobrenome "Davis", você passaria para a página apropriada e leria os números. (Esta é uma busca de índice .)
Se eu pedir para você encontrar todos os números de telefone de pessoas com o primeiro nome "Janice", seria necessário procurar em todas as páginas para encontrar todas elas. (Esta é uma verificação de índice .)
Se eu der a você um nome e um sobrenome, você poderá encontrar essa entrada muito rapidamente, assim como no primeiro exemplo, porque é óbvio que você usaria o sobrenome para encontrar a página correta e, em seguida, o nome para encontre a entrada exata. Não importa qual ordem eu lhe forneça as informações, desde que eu tenha lhe dado um nome e um sobrenome.
O otimizador de consulta do SQL Server funciona da mesma maneira. Com base na ordem das chaves de índice, ela determina automaticamente a maneira mais eficiente de recuperar os dados solicitados, independentemente da ordem das condições na
WHERE
cláusula.fonte
A ordem das colunas no índice importa, mas não na ordem dos valores anded na
where
cláusula.fonte