Ik ben dit probleem eerder tegengekomen. Hier is mijn analyse ervan.
-
Het komt voor in MySQL 5.7 en 8.0, maar blijkbaar niet in oudere versies en niet in MariaDB.
-
De "oplossing" die ik verkies is om de indexen als volgt te wijzigen:
INDEX(company_id) -- DROP this INDEX(company_id, id) -- ADD this
Hoewel de 2-koloms index theoretisch identiek is aan de één-koloms index voor InnoDB (ervan uitgaande dat id
is de PK`), lijkt de Optimizer dit feit in sommige situaties . te negeren .
Ik vind het ook leuk om de PK expliciet toe te voegen wanneer ik een behoefte zie . Dit signaleert toekomstige lezers van het schema (inclusief ikzelf) dat sommige zoekopdrachten baat hebben bij het toevoegen van de PK.
Ik heb nog geen geval gevonden waarin "index merge intersect" sneller is dan een equivalente samengestelde index.
Ik hou er niet van om ooit index-hints te gebruiken uit angst dat de gegevensdistributie in de toekomst zal veranderen en mijn 'hint' de zaken erger zal maken.