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?