2013-02-13 17 views
6
add_index :microposts, [:user_id, :created_at] 

Przechodziłem przez przejazd kolejowy Michaela Hartla i zauważyłem, że używa on czegoś o nazwie indeks wielu kluczy. Wiem, że oznacza to, że Active Record używa obu kluczy jednocześnie, ale nie jestem pewien, jakie są zalety i wady używania wielu kluczowych indeksów.Co to jest indeks wielu kluczy?

Jeśli ktoś może udzielić odpowiedzi, byłbym bardzo wdzięczny.

Odpowiedz

11

Każdy indeks może przynieść korzyść, umożliwiając zawężenie zestawu wierszy do zbadania.

Indeks z wieloma kolumnami może pomóc, gdy zapytanie zawiera warunki dla tych wielu kolumn.

Na przykład:

SELECT * FROM Mytable WHERE user_id = 123 AND created_at > '2013-02-01' 

Indeks wielokolumnowych zawęża się podzbiór wierszy, które są związane z user_id 123, a następnie w ramach tej podgrupy jest dodatkowo zawęża wybór do tych z ostatniej created_at wartość.

Bez drugiej kolumny indeksu, RDBMS musiałby załadować do pamięci wszystkie wiersze dla ID użytkownika 123, zanim będzie mógł określić, czy spełniają kryteria. Aby uzyskać więcej informacji, zobacz moją prezentację

.

+0

Wielkie dzięki! Na pewno sprawdzę twoją prezentację. – jeebface

+0

Dzięki za link do prezentacji! – finitud

0

Ogólnie klucz wyszukiwania może mieć więcej niż jeden atrybut, do którego odnosimy się jako klucz kompilacyjny lub klucz wielokrotny.

Jako przykład, weź pod uwagę indeks relacji uniwersyteckich. Tutaj złożony klucz wyszukiwania (course_id, year_of_enroll). Taki indeks byłby pomocny w znalezieniu wszystkich uczniów z konkretnym identyfikatorem kursu iw danym roku zapisali się na uniwersytet. Ten proces wyszukiwania indeksu precyzyjnie określiłby nasz pożądany zapis w relacji.