Jak INDEX na Composite Primary Key w mysql?

12

Dokonując kompozytowy klucz podstawowy dla dwóch lub więcej kolumn, np PRIMARY KEY(col1, col2, col3); czy system będzie w INDEXkażdej kolumnie osobno?

Powodem, dla którego zadaję to pytanie, jest to, że kiedy go używamy UNIQUE INDEX (col1, col2, col3), działa on jak INDEXdla pierwszej kolumny i musimy utworzyć dodatkowe INDEXs dla innych kolumn. Chcę wiedzieć, czy tak jest również w przypadku klucza podstawowego Composite.

Googlebot
źródło

Odpowiedzi:

16
  1. Złożony indeks pierwotny zawsze zapewni unikalność kombinacji wartości col1, col2, col3. Jeśli celem indeksu jest upewnienie się, że wartości są unikalne, osiągniesz to

  2. Indeks złożony zapewnia również dopasowania indeksu dla dowolnej kombinacji kolumn col1, col2 i col3

  3. Utworzyłbyś osobne indeksy na col2 i col3, jeśli dołączysz lub przefiltrujesz przy użyciu jednej z kolumn bez pozostałych.

  4. Zawsze wolę numeryczny klucz podstawowy (bez powiązania biznesowego) i unikalne indeksy niż złożony klucz podstawowy, jeśli to konieczne.

Stephen Senkomago Musoke
źródło
1
słuszne uwagi! następnie złożony klucz podstawowy jest podobny do UNIKALNEGO INDEKSU, a my nie mamy indeksu dla drugiej, trzeciej, ... kolumny do szybkiego pobierania wiersza?
Googlebot
1
@ssmusoke Czy mogę pominąć col1w punkcie 3, że a SELECT * WHERE col1 = 10byłby skuteczny?
Andy,
2
@Andy # 3 jest dodatkiem do indeksu złożonego col1, col2 i col3, więc zostanie użyty indeks złożony. Jeśli jednak zrobisz filtry na col2 i col3 bez col1, potrzebujesz osobnych indeksów dla każdego z nich osobno
Stephen Senkomago Musoke
3
Posiadanie indeksu na col1, col2 i col3 oznacza, że ​​WYBIERZ * Z col1 = 10 będzie skuteczny, ponieważ col1 jest pierwszą kolumną w indeksie, więc # 3 pozwala zrobić to samo dla col2 i col3, więc jeśli filtruj według samych kolumn bez col1, a następnie kolumny są również indeksowane
Stephen Senkomago Musoke
2
@PaulWasilewski tak, rzeczywiście są specjalne przypadki, w których złożony klucz podstawowy ma sens, ale są to tylko specjalne przypadki.
Stephen Senkomago Musoke