/ / Jak utworzyć indeks wielopoziomowy w MySql i jak znaleźć kolumnę zindeksowaną wielopoziomowo? - mysql, indeksowanie, wydajność bazy danych, indeks nieklastrowy

Jak utworzyć indeks wielopoziomowy w MySql i jak znaleźć kolumnę indeksowaną wielopoziomowo? - mysql, indeksowanie, wydajność bazy danych, indeks nieklastrowy

Mam stolik "zajęcia". składa się z około miliona rekordów. jego kolumny składają się,

id (PK), u_id (FK), cl_id (FK), activity_log

Domyślnie id (PK) jest indeksowany i utworzyłem własny indeks dla u_id i cl_id przy użyciu,

ALTER TABLE activities ADD INDEX(u_id,cl_id);

Teraz chciałbym stworzyć Indeksowanie wielopoziomowe dla cl_id (FK) lub id (PK) lub dla obu kolumn, jeśli jest to możliwe. Jak utworzyć wielopoziomowy indeks za pomocą zapytania?

Jak znaleźć kolumnę wielopoziomową zindeksowaną w tabeli? Próbowałem tej kwerendy, ale pokazuje tylko kolumna, które są indeksowane,

SHOW indexes FROM activities;

Czy indeks wielopoziomowy i indeks nieklastrowy są takie same?

Odpowiedzi:

0 dla odpowiedzi № 1

Nie mam pojęcia, co to jest indeks "wielopoziomowy". Ale istnieją "złożone" indeksy takie jak

INDEX(last_name, first_name)

co jest bardzo przydatne dla

WHERE last_name = "James"
AND first_name = "Rick"

lub nawet

WHERE last_name = "James"
AND first_name LIKE "R%"

W MySQL (w szczególności InnoDB), PRIMARY KEY jest zawsze unikalnym indeksem i jest "zgrupowany" z danymi. Oznacza to, że szukanie w rzędzie przez PK jest bardzo skuteczne. Struktura jest zawsze BTree.

"Drugorzędne klawisze" to również "Kończy się", ale węzeł liścia zawiera PK. Tak więc do zakończenia zapytania potrzebne jest drugie wyszukiwanie. (To rozróżnienie rzadko jest nic warte.)

PK i / lub klucze dodatkowe mogą być "złożone".

Zgłaszanie a FOREIGN KEY dodaje indeks wtórny, jeśli nie ma już odpowiednich (PRIMARY lub wtórny) indeks rozpoczynający się od kolumny w FK.

Poniższe informacje są zbędne i należy ich unikać:

PRIMARY KEY(id),
INDEX(id)           -- DROP this

Sekwencyjne indeksowane

Oooo! Nie słyszałem o tej przestarzałej metodzie indeksowania od prawie dwóch dekad.

Pytanie podaje link do takiej definicji "wielopoziomowego" indeksowania. Uciekajcie z tego! Zmień szkoły. Albo przynajmniej zrozum, że IS nie jest już uważany za wykonalny.

MySQL używa "BTrees" dla większości indeksowania. Został wymyślony dziesiątki lat temu i zasadniczo usunął indeksowaną sekwencję. I, w dużej mierze, zmienił Hashing jako technikę indeksowania na dysku.

Kontakty MySQL mogą obsługiwać wiele kolumn, tak jak w moim przykładzie powyżej.