Separate Join clause in a Composite Index
Only the leading edge of the index would be used (a.id
), so only the INNER JOIN
to b
would benefit from the index... so the additional columns in the index (a.bar
and a.foo
) are not beneficial in the sample query posted.
From the MySql documentation:
MySQL cannot use the index to perform lookups if the columns do not form a leftmost prefix of the index. Suppose that you have the
SELECT
statements shown here: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;
If an index exists on
(col1, col2, col3)
, only the first two queries use the index. The third and fourth queries do involve indexed columns, but(col2)
and(col2, col3)
are not leftmost prefixes of(col1, col2, col3)
.