Eu encontrei esse problema antes. Aqui está a minha análise dele.
-
Ocorre no MySQL 5.7 e 8.0, mas aparentemente não nas versões mais antigas e não no MariaDB.
-
A "solução" que prefiro é mudar os índices assim:
INDEX(company_id) -- DROP this INDEX(company_id, id) -- ADD this
Embora o índice de 2 colunas seja teoricamente idêntico ao índice de uma coluna para InnoDB (assumindo
id
é o PK`), o Optimizer parece ignorar este fato em algumas situações . Além disso, gosto de adicionar explicitamente o PK quando vejo uma necessidade . Isso sinaliza aos futuros leitores do esquema (inclusive eu) que algumas consultas se beneficiam do PK que está sendo anexado.
Ainda não encontrei um caso em que "intersecção de mesclagem de índice" seja mais rápido que um índice composto equivalente.
Eu não gosto de usar "dicas" de índice por medo de que a distribuição de dados mude no futuro e minha "dica" piore as coisas.