Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

A ordem dos campos do índice de várias colunas no MySQL é importante


Ao discutir índices de várias colunas, uso uma analogia com uma lista telefônica. Uma lista telefônica é basicamente um índice sobre o sobrenome, depois o primeiro nome. Portanto, a ordem de classificação é determinada por qual "coluna" é a primeira. As pesquisas se enquadram em algumas categorias:

  1. Se você procurar pessoas cujo sobrenome é Smith, poderá encontrá-las facilmente porque o livro é classificado por sobrenome.

  2. Se você procurar pessoas cujo primeiro nome é John, a lista telefônica não ajuda porque os Johns estão espalhados por todo o livro. Você tem que escanear toda a lista telefônica para encontrá-los todos.

  3. Se você procurar pessoas com um sobrenome específico Smith e um primeiro nome específico John, o livro ajuda porque você encontra os Smiths classificados juntos e, dentro desse grupo de Smiths, os Johns também são encontrados em ordem classificada.

Se você tivesse uma lista telefônica classificada pelo primeiro nome e depois pelo sobrenome, a classificação da lista o ajudaria nos casos 2 e 3 acima, mas não no caso 1.

Isso explica os casos para procurar valores exatos, mas e se você estiver procurando por intervalos de valores? Digamos que você queira encontrar todas as pessoas cujo primeiro nome seja John e cujo sobrenome comece com 'S' (Smith, Saunders, Staunton, Sherman, etc.). Os Johns são classificados em 'J' dentro de cada sobrenome, mas se você quiser que todos os Johns para todos os sobrenomes comecem com 'S', os Johns não serão agrupados. Eles estão espalhados novamente, então você acaba tendo que escanear todos os nomes com sobrenome começando com 'S'. Considerando que se a lista telefônica fosse organizada pelo primeiro nome e depois pelo sobrenome, você encontraria todos os Johns juntos, então dentro dos Johns, todos os sobrenomes 'S' seriam agrupados.

Portanto, a ordem das colunas em um índice de várias colunas definitivamente importa. Um tipo de consulta pode precisar de uma determinada ordem de coluna para o índice. Se você tiver vários tipos de consultas, poderá precisar de vários índices para ajudá-las, com colunas em ordens diferentes.

Você pode ler minha apresentação Como criar índices, realmente Para maiores informações.