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

wydajne porządkowanie kluczy w złożonym indeksie MySQL (skojarzenia polimorficzne WRT Rails i STI)

Z moich własnych badań (ale nie jestem ekspertem DBA) dowiedziałem się, że przy podejmowaniu decyzji o kolejności indeksu klucza złożonego należy wziąć pod uwagę dwie rzeczy.

Po pierwsze, jeśli chodzi o liczność kolumn, indeks generalnie lepiej sprawdza się w wyszukiwaniu kolumn o dużej liczności. Skłonny byłbym więc umieścić kolumnę o najwyższej kardynalności jako pierwszą w indeksie. Dla porównania, istnieje artykuł zatytułowany Optymalizacja zapytań MySQL który mówi:

W Twoim przypadku _id kolumny wyraźnie lepiej pasowałyby do tej definicji, dlatego są lepszym kandydatem na prefiks klucza.

Inną rzeczą do rozważenia jest możliwość ponownego wykorzystania tych indeksów. Większość (jeśli nie wszystkie) systemów baz danych pozwala na ponowne użycie przedrostka klucza złożonego. Na przykład klucz złożony w (owner_id, owner_type) może być również używany przez zapytania dotyczące owner_id ale nie na owner_type .

Więc z tego, co wyjaśniłeś w swoim pytaniu, może być lepiej, jeśli skorzystasz z dwóch indeksów:indeksu klucza złożonego na (owner_id, owner_type) a drugi na (owner_type) .

Wreszcie, wszystko sprowadza się do zestawu danych i zapytań. Wypróbuj różne scenariusze, testy porównawcze, używając różnych kolejności kluczy złożonych, aby zobaczyć, jakie jest najbardziej optymalne rozwiązanie. Nie zapominaj też, że indeksy wiążą się z karą za zapis na twoich tabelach.

Aktualizacja :Jest tam również inne dość popularne pytanie SO dotyczące indeksu klucza złożonego:

Kiedy należy używać indeksu złożonego?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apache PHP ulega awarii podczas wykonywania PROCEDURY PRZECHOWYWANEJ

  2. Kod błędu:1062. Zduplikowany wpis „1” dla klucza „PRIMARY”

  3. SQL/PHP:Pokaż 3 najczęściej sprzedawane produkty z bazy danych

  4. Używanie wyrażenia regularnego z LIKE do sortowania najpierw alfabetów, a następnie symboli SQL

  5. mysql_query do PDO i przygotowane oświadczenia