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

Czy powinniśmy uwzględnić kolumnę sortowania, klucz podstawowy w indeksie złożonym (MySQL)

Odpowiedź zależy od używanego silnika:

  • MyISAM - dodanie id do indeksu może i prawdopodobnie pomoże
  • InnoDB — klucz podstawowy jest już częścią każdego indeksu dodatkowego, ponieważ innodb przechowuje wiersze w BTREE posortowane według klucza podstawowego, a indeks musi wskazywać na bieżący wiersz — w takim przypadku dodanie go jest zbędne, jeśli jest on ostatnim w indeksie ( ale zrobienie tego nie doda tego dwa razy, więc nie powinno to pogorszyć sprawy). W niektórych przypadkach możesz chcieć dodać go jako nie-ostatni, lub masz wielokolumnowy podstawowy i dodajesz kilka kolumn do swojego indeksu w innej kolejności - nie powinno być z tym problemu, innodb dołączy pozostałe kolumny podstawowego do tego indeksu, ale może używać tych dodanych wcześniej bez ich duplikowania)

Więc odpowiedzi:

  1. W InnoDB jest to niepotrzebne, w MyISAM jest to dobre w przypadku, gdy faktycznie używasz tego sortowania, jeśli go nie używasz, dodanie go tylko zwiększa ten indeks.
  2. Kolejność kolumn w definicji tabeli i kolejność w indeksie to odrębne rzeczy, więc jest OK
  3. Tak, ten indeks wydaje się naprawdę dobry – ale możesz to sprawdzić za pomocą WYJAŚNIJ , istnieje możliwość jeszcze lepszej wydajności - "indeks pokrycia ”, ale wiąże się to z pewnymi kosztami, więc chyba że zapytanie jest krytyczne i nieskuteczne, prawdopodobnie jest to przesada.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Struktura bazy danych obejmująca pola dynamiczne

  2. MySQL:#1075 - Nieprawidłowa definicja tabeli; autoinkrementacja a inny klucz?

  3. pip install mysqlclient zwraca błąd krytyczny C1083:Nie można otworzyć pliku:'mysql.h':Brak takiego pliku lub katalogu

  4. utf8 zniekształcony podczas importowania do mysql

  5. Domyślny czas daty i godziny MySQL z interwałem