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

Czy indeks złożony z drugą kolumną o niskiej kardynalności wystarczy, aby go użyć?

Koszt utrzymania indeksu (jednokolumnowego lub wielokolumnowego) prawie zawsze jest równoważony przez poprawę wydajności, gdy ten indeks jest używany. Jest to mały przyrost na każdym INSERT /DELETE , plus koszt w przypadku zmiany wartości indeksowanego pola za pomocą UPDATE . (UPDATE przypadek jest rzadki.) Więc nie martw się o koszt "utrzymywania indeksu złożonego".

WHERE `vehicles`.`type` IN ('Car')
  AND `vehicles`.`user_id` = 10

potrzebuje INDEX(user_id, type) .

Optymalizator

  1. odkryj, że ten indeks jest możliwym kandydatem,
  2. sprawdź statystyki, a następnie
  3. albo użyj indeksu, albo zdecyduj, że kardynalność jest słaba i po prostu zeskanuj tabelę.

Dołącz indeks; nie martw się o to.

Uporządkowałem pola w ten sposób, a nie (type, user_id) na podstawie Twojego IN , co oznacza, że ​​czasami możesz mieć wiele wartości dla type .

Jeśli wszystkie wiersze w tabeli mają type = 'Car' , bez problemu. Wszystko, co powiedziałem, nadal obowiązuje. Marnotrawstwo dołączania niepotrzebnego type jest nieistotne.

Lepiej jest mieć wszystkie kolumny „=” najpierw w indeksie, a następnie co najwyżej jedno inne pole. Dalsza dyskusja tutaj .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zablokować wiersz do wyboru w MySQL?

  2. Porównaj dwa ciągi znaków w MySQL

  3. uzależnione od zduplikowanej aktualizacji klucza

  4. Entity Framework (EF6) + baza danych MySql Pierwszy model relacji wiele do wielu Nieprawidłowe generowanie zapytań

  5. Ostrzeżenie:mysqli_num_rows() oczekuje dokładnie 1 parametru, 2 podane | mysql | mysqli