Me he encontrado con este problema antes. Aquí está mi análisis de ello.
-
Ocurre en MySQL 5.7 y 8.0, pero aparentemente no en versiones anteriores ni en MariaDB.
-
La "solución" que prefiero es cambiar los índices así:
INDEX(company_id) -- DROP this INDEX(company_id, id) -- ADD this
Aunque el índice de 2 columnas es teóricamente idéntico al índice de una columna para InnoDB (suponiendo que id
es el PK`), el Optimizer parece ignorar este hecho en algunas situaciones .
Además, me gusta agregar explícitamente el PK cuando veo una necesidad . Esto indica a los futuros lectores del esquema (incluyéndome a mí) que algunas consultas se benefician de la adición de PK.
Todavía tengo que encontrar un caso en el que la "intersección de combinación de índices" sea más rápida que un índice compuesto equivalente.
No me gusta usar "sugerencias" de índice por temor a que la distribución de datos cambie en el futuro y mi "sugerencia" empeore las cosas.