2009-12-03 19 views
15

Po prostu proste pytanie, ale czy kolejność twojego indeksu ma znaczenie, gdy rozciąga się na wiele kolumn?Porządek indeksu dla wielu kolumn

Na przykład, biorąc zapytania:

 
SELECT * FROM my_table WHERE (column_1 = 1 AND column_2 = 2) 

Jeśli chcę dodać indeks dla zapytania jak ta, to ma znaczenie, jeśli mój indeks jest tworzony tak:

 
CREATE INDEX my_index 
ON my_table (column_1, column_2) 

Or tak:

 
CREATE INDEX my_index 
ON my_table (column_2, column_1) 

Dzięki za pomoc!

Odpowiedz

21

W podanym przykładzie kolejność kolumn nie ma znaczenia.

Byłoby ważne, jeśli zamówisz w kolumnie; indeks na (col1,col2) może być używany dla ORDER BY col1, col2, ale nie dla ORDER BY col2, col1.

Dla klauzul WHERE, indeks na (col1, col2) działa dla WHERE col1 = 1 AND col2 = 1. Działa również dla WHERE col1 = 1. Ale nie może pomóc z WHERE col2 = 1.

+4

W rzeczywistości może to mieć znaczenie nawet w tym przypadku. Jeśli prawie każdy wiersz ma col1 = 1, indeks najprawdopodobniej działałby lepiej, gdyby col2 był pierwszy, nawet gdy zwracasz uwagę na oba. –

+3

Może to mieć znaczenie w podanym przykładzie, jeśli jedna kolumna ma znacznie wyższą efektywność niż druga. Najpierw umieść kolumny o wysokiej selektywności (wiele różnych wartości). – Manu

+0

Doskonała informacja w tej odpowiedzi, aby pomóc zrozumieć, jak trafić indeksy już dostępne w systemie. – Swoop

0

Najlepszym sposobem, aby się tego dowiedzieć, jest zmierzenie. Wypróbuj jedną, zmierz wydajność, a następnie usuń ten indeks i wypróbuj drugi. Zazwyczaj dane, których dotyczy zapytanie, leżą blisko siebie w indeksie na dysku, a kolejność kolumn w indeksie ma wpływ na sposób przechowywania indeksu na dysku. Bardzo trudno jest zgadnąć, która kombinacja indeksów będzie działać najlepiej, więc wypróbuj kilka różnych możliwości i zmierz, aby dowiedzieć się, która jest najlepsza dla twoich danych.

Powiązane problemy