2012-10-31 12 views

Odpowiedz

3

byłyby wykorzystywane jedynie przednia krawędź indeksu (a.id), więc tylko indeks INNER JOIN na b skorzystałby z indeksu ... więc dodatkowe kolumny w indeksie (a.bar i a.foo) nie są korzystne w wysłanej przykładowej kwerendzie.

From the MySql documentation:

MySQL nie może użyć indeksu do wykonywania wyszukiwań jeśli kolumny nie tworzą od lewej prefiksu indeksu. Załóżmy, że masz SELECT sprawozdań pokazane tutaj:

SELECT * 
FROM tbl_name 
WHERE col1=val1; 

SELECT * 
FROM tbl_name 
WHERE col1=val1 AND col2=val2; 

SELECT * 
FROM tbl_name 
WHERE col2=val2; 

SELECT * 
FROM tbl_name 
WHERE col2=val2 AND col3=val3; 

Jeśli indeks istnieje na (col1, col2, col3), tylko dwa pierwsze pytania użyć indeksu. Trzecie i czwarte zapytanie obejmuje kolumny indeksowane, ale (col2) i (col2, col3) nie są przedrostkami położonymi najdalej na lewo od (col1, col2, col3).