联合索引最左匹配

假设有联合索引 idx1(a,b,c)

  下面的SQL可完整用到索引。 1.SELECT ... WHERE b=? AND c=? AND a=?; 2.SELECT ... WHERE b=? AND a=? AND c=?; 3.SELECT ... WHERE a=? AND b IN(?,?) AND c=?; 4.SELECT ... WHERE a=? AND b=? ORDER BY c; 5.SELECT ... WHERE a=? AND b IN(?,?) ORDER BY c; 6.SELECT ... WHERE a=?  ORDER BY b,c; 7.SELECT ... ORDER BY a,b,c;   而下面几个SQL则只能用到部分索引,或者可利用到ICP特性(5.6起) 1.SELECT ...WHERE b=? AND a=? --只能用到(a,b)部分。 2.SELECT ...WHERE a IN (?,?) AND b=?; --只用到(a,b) 部分,同时有ICP。 3.SELECT ...WHERE (a BETWEEN ? AND ?) AND b=?; --只用到(a,b) 部分,同时有ICP。 4.SELECT ...WHERE a=? AND b IN (?,?); --只用到(a,b)部分,同时有ICP。 5.SELECT ...WHERE a=? AND (b BETWEEN ? AND ?) AND c=?; --可用到(a,b,c)整个索引,同时有ICP。 6.SELECT ...WHERE a=? AND c=?;--只用到(a)部分索引,同时有ICP。 7.SELECT ...WHERE a=? AND c>=?;--只用到(a)部分索引,同时有ICP。   ICP(index condition pushdown)是MySQL5.6的新特性,其机制会让索引的其他部分也参与过滤,减少引擎层和server层之间的数据传输和回表请求,通常情况下可大幅提升查询效率。     下面几个SQL完全用不到索引 1.SELECT ...WHERE b=?; 2.SELECT ...WHERE b=? AND c=?; 3.SELECT ...WHERE b=? AND c>=?; 4.SELECT ...ORDER BY b; 5.SELECT ...ORDER BY b,a;
上一篇:工信部ICP备案管理系统滑动验证码破解


下一篇:从零开始一起学习SALM-ICP原理及应用