Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Indeksowanie dla stronicowania zestawów kluczy w mysql

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ę.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Znajdowanie ostatniej wiadomości z tabeli, pogrupowanej według użytkownika w mysql

  2. Niestandardowa tabela Wordpress czy niestandardowe typy postów?

  3. Używanie JDeveloper z bazą danych MySQL i bazą danych Oracle na AWS RDS, część 2

  4. Jak mogę uniknąć pełnego skanowania tabeli w tym zapytaniu mysql?

  5. sprawdź, czy e-mail istnieje w bazie danych MySQL