Jeg er stødt på dette problem før. Her er min analyse af det.
-
Det forekommer i MySQL 5.7 og 8.0, men tilsyneladende ikke i ældre versioner og ikke i MariaDB.
-
Den "løsning" jeg foretrækker er at ændre indekserne således:
INDEX(company_id) -- DROP this INDEX(company_id, id) -- ADD this
Selvom 2-kolonne-indekset teoretisk er identisk med én-kolonne-indekset for InnoDB (forudsat id
er PK`), ser optimeringsværktøjet ud til at ignorere dette faktum i nogle situationer .
Jeg kan også godt lide eksplicit at tilføje PK'en når jeg ser et behov . Dette signalerer fremtidige læsere af skemaet (inklusive mig selv), at nogle forespørgsler drager fordel af, at PK'en tilføjes.
Jeg har endnu ikke fundet et tilfælde, hvor "indeksfletning skærer" er hurtigere end et tilsvarende sammensat indeks.
Jeg kan ikke lide nogensinde at bruge indeks-"tip" af frygt for, at datafordelingen vil ændre sig i fremtiden, og mit "tip" vil gøre tingene værre.