Separate Join clause in a Composite Index

前端 未结 2 1053
天命终不由人
天命终不由人 2021-01-18 09:25

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)
         


        
2条回答
  •  清歌不尽
    2021-01-18 09:41

    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).

提交回复
热议问题