Z tym problemem spotkałem się już wcześniej. Oto moja analiza.
-
Występuje w MySQL 5.7 i 8.0, ale najwyraźniej nie w starszych wersjach i nie w MariaDB.
-
„Rozwiązaniem”, które preferuję, jest taka zmiana indeksów:
INDEX(company_id) -- DROP this INDEX(company_id, id) -- ADD this
Chociaż indeks dwukolumnowy jest teoretycznie identyczny z indeksem jednokolumnowym dla InnoDB (przy założeniu id
jest PK`), Optymalizator wydaje się ignorować ten fakt w niektórych sytuacjach .
Lubię też wyraźnie dodać PK kiedy widzę potrzebę . To sygnalizuje przyszłym czytelnikom schematu (w tym mnie), że niektóre zapytania odnoszą korzyści z dołączenia pliku PK.
Nie znalazłem jeszcze przypadku, w którym „przecięcie indeksów scalających” jest szybsze niż odpowiednik indeksu złożonego.
Nie lubię używać indeksowych „wskazówek” z obawy, że dystrybucja danych zmieni się w przyszłości, a moja „wskazówka” pogorszy sytuację.