Jag har stött på det här problemet tidigare. Här är min analys av det.
-
Det förekommer i MySQL 5.7 och 8.0, men uppenbarligen inte i äldre versioner och inte i MariaDB.
-
"Lösningen" jag föredrar är att ändra indexen så här:
INDEX(company_id) -- DROP this INDEX(company_id, id) -- ADD this
Även om indexet med 2 kolumner är teoretiskt identiskt med indexet med en kolumn för InnoDB (förutsatt id
är PK`), verkar Optimizern ignorera detta faktum i vissa situationer .
Jag gillar också att uttryckligen lägga till PK när jag ser ett behov . Detta signalerar framtida läsare av schemat (inklusive jag själv) att vissa frågor drar nytta av att PK läggs till.
Jag har ännu inte hittat ett fall där "index merge intersect" är snabbare än ett motsvarande sammansatt index.
Jag ogillar att någonsin använda index-"tips" av rädsla för att datadistributionen kommer att förändras i framtiden och att mitt "tips" kommer att göra saken värre.