Separate Join clause in a Composite Index
composite-index, mysql
Solution
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)`.
Problem
Would having a Composite Index be beneficial for something like this: ``` SELECT * FROM a INNER JOIN b ON(a.id=b.id) INNER JOIN c ON(a.bar=c.id) INNER JOIN d ON(a.foo=d.id) ``` Index would be: ``` (a.id, a.bar, a.foo) ```