2012-10-31 10 views

risposta

3

sarebbe stato utilizzato solo il bordo iniziale dell'indice (a.id), quindi solo lo INNER JOIN a b trarrebbe beneficio dall'indice ... quindi le colonne aggiuntive nell'indice (a.bar e a.foo) non sono vantaggiose nella query di esempio pubblicata.

From the MySql documentation:

MySQL non può utilizzare l'indice per eseguire ricerche se le colonne non fanno forma un prefisso sinistra dell'indice. Si supponga di avere le SELECT dichiarazioni qui riportate:

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; 

Se un indice esiste (col1, col2, col3), solo i primi due query utilizzare l'indice. La terza e quarta query comportano colonne indicizzate, ma (col2) e (col2, col3) non sono prefissi più a sinistra di (col1, col2, col3).