Índice Composto MySQL

Lembre-se do seguinte ao criar índices compostos para tabelas MySQL:

  • Um índice composto é pelo MySQL para consultas OPTIMIZE for colunas utilizadas em WHERE, ORDER BY, GROUP BYe MIN/MAX.

  • Um índice de três colunas (col1, col2, col3)pode ser usado para recursos de pesquisa on (col1), (col1, col2)e (col1, col2, col3)(ordenação não importa). Não pode ser usado para (col2)ou (col2, col3)ou (col3). Se a tabela tiver um índice de várias colunas, qualquer prefixo mais à esquerda do índice pode ser usado pelo otimizador para localizar linhas.

  • Depois de decidir que precisa de um índice composto (col1, col2, col3), a ordem preferencial é colocar as colunas de cardinalidade mais alta primeiro. Se a coluna 2 tiver a cardinalidade mais alta, você pode criar um índice, (col2, col1, col3)mas lembre-se de que ele não pode ser usado para otimizar pesquisas apenas (col1)etc.

  • O MySQL usa apenas um índice por consulta. Conseqüentemente, os índices compostos são úteis. Você pode usar uma subconsulta para contornar isso, se necessário, mas o ideal é ter um índice composto com as colunas relevantes.

  • Se você tiver dois índices separados em col1 e col2, o MySQL irá preferir aquele com a cardinalidade mais alta. O MySQL mantém estatísticas sobre a cardinalidade de cada índice. Um índice com o poder mais discriminador permite que o MySQL elimine o número máximo de linhas no tempo mais rápido.

  • Se todos os campos selecionados em uma consulta são cobertos por um índice, o MySQL nunca precisa atingir o banco de dados e pode buscar os campos diretamente do índice (aplica-se apenas ao InnoDB). Portanto, se você selecionar col1 da tabela1 e col1 for indexado, o MySQL usará um índice de cobertura e nunca atingirá a tabela.

Referência: