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

Czy prawidłowe jest indeksowanie wszystkich kolumn w bazie danych mysql?

Nie, nie indeksujesz wszystkich kolumn. Indeksujesz kolumny, które są konkretnie zaangażowane w WHERE klauzuli, a czasami, jeśli biorą udział w ORDER BY .

W takim przypadku potrzebujesz indeksu na type :

SELECT name FROM users WHERE type='admin'

W tym przypadku potrzebujesz indeksu na active,type :

SELECT name FROM users WHERE type='admin' AND active=1

W takim przypadku możesz potrzebować indeksu na active,type,name :

SELECT name FROM users WHERE type-='admin' AND active=1 ORDER BY name LIMIT 10

Im więcej indeksów dodasz, tym wolniejsze będą zapisy, ale szybsze będą odczyty. To klasyczny kompromis. Oceń dokładnie, jakich indeksów potrzebujesz i stosuj je tylko wtedy, gdy przyniesie to wymierne korzyści. Nie uderzaj ich tylko dlatego, że czujesz, że powinny tam być.

W przypadku bardzo małych tabel, tych z <1000 wierszami, indeksy nie pomogą tak bardzo, ponieważ skanowanie tabeli nie zajmie tak dużo czasu. W przypadku wszystkiego, co niebanalne, są one absolutnie niezbędne.

Jeśli masz problemy z wydajnością, sugeruję, że największą przeszkodą jest Twój schemat, a nie brak indeksów.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SUBDATE() vs DATE_SUB() w MySQL:jaka jest różnica?

  2. Dlaczego wstawianie/aktualizacja MySQL InnoDB w dużych tabelach jest bardzo powolna, gdy jest kilka indeksów?

  3. mysql_fetch_array i tylko klucze tablicy ciągów

  4. Zawijaj elementy tablicy w elementach div na podstawie tej samej wartości

  5. PHP mySQL - Kiedy najlepiej odłączyć się od bazy danych?