A ordem da coluna na cláusula where deve ser a mesma da ordem do índice?

8

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. Plano de consulta

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 !!

Igualitário
fonte
3
O plano de execução do seu teste não responde à pergunta?
usar o seguinte código
Sim !! Mas eu queria uma opinião de especialista e, nos casos em que isso pode falhar. Obrigado !!
Igualitário
11
Pergunta semelhante para o MySQL: No MySQL, a ordem das colunas na cláusula WHERE afeta o desempenho da consulta? O otimizador do SQL-Server é alguns níveis mais alto que o do MySQL.
usar o seguinte código

Respostas:

13

Então, minha pergunta é: a ordem das colunas na cláusula Where é importante

Não. A ordem das colunas na WHEREcláusula não importa.

um cavalo sem nome
fonte
10

Primeiro, a DROPinstruçã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 WHEREcláusula.

Jon Seigel
fonte
Ótima explicação sobre varredura de índice e busca por índice.
Neelam
0

A ordem das colunas no índice importa, mas não na ordem dos valores anded na wherecláusula.

Gaston Sanchez
fonte