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)
.
fonte
2012-10-31 18:30:36