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

ordem de desempenho de chaves em um índice composto MySQL (associações polimórficas WRT Rails e STI)


De minha própria pesquisa (mas não sou um DBA especialista), aprendi que há duas coisas a serem consideradas ao decidir a ordem de um índice de chave composta.

Primeiro, em relação à cardinalidade das colunas, o índice geralmente é melhor para pesquisar colunas com alta cardinalidade. Então, eu estaria inclinado a colocar a coluna com a maior cardinalidade primeiro no índice. Para referência, há um artigo intitulado Otimização de consulta MySQL isso diz:

No seu caso, o _id colunas claramente se encaixariam melhor nessa definição, portanto, elas são um candidato melhor para ser um prefixo da chave.

Outra coisa a considerar seria a reutilização desses índices. A maioria dos sistemas de banco de dados (se não todos) permite que um prefixo de uma chave composta seja reutilizado. Por exemplo, uma chave composta em (owner_id, owner_type) também pode ser usado por consultas em owner_id mas não em owner_type .

Então, pelo que você explicou em sua pergunta, talvez seja melhor usar dois índices:um índice de chave composta em (owner_id, owner_type) e outro em (owner_type) .

Por fim, tudo se resume ao seu conjunto de dados e consultas. Experimente vários cenários, benchmarks usando diferentes ordenações de chaves compostas para ver qual é a solução mais ideal. Além disso, não se esqueça de que os índices incorrem em uma penalidade de gravação em suas tabelas.

Atualizar :Há também outra pergunta SO bastante popular sobre o índice de chave composta:

Quando devo usar um índice composto?