Preciso de ajuda para identificar índices para aumentar o desempenho da seguinte consulta. Atualmente estou usando v5.5 com InnoDB. Não consigo modificar a consulta. No entanto, posso adicionar índices conforme necessário. Os seguintes índices estão disponíveis atualmente:
- t1.id = Chave primária
- t1.status
- t2.proprietário
- t2.usuário
t2.total
select t1.`id` from (tbl1 t1 inner join tbl2 t2 on t1.`id` = t2.`id`) where (t2.`owner` = `ABC123` or t2.`user` = `ABC123`) and t1.status = 1 order by t2.`total` limit 0, 100;
Este termo de pesquisa forçará uma varredura de tabela. Índices compostos não ajudarão.
Suponha que você tenha um índice composto em
(owner, user)
. Ele poderia fazer uma pesquisa rápidaowner = 'ABC123'
, mas os valores desejadosuser
poderiam estar em qualquer lugar da tabela, não apenas no subconjunto correspondente aoowner
valor desejado. Portanto, ele deve verificar a tabela inteira de qualquer maneira.Da mesma forma, se você tivesse um índice composto em
(user, owner)
. Ele poderia fazer uma pesquisa rápidauser = 'ABC123'
, mas o mesmo problema existe, encontrar as linhasowner
forçará uma varredura de tabela.A única possibilidade restante é usar otimização de união de mesclagem de índice , mas, na minha experiência, isso não funciona tão bem quanto você pensa.