• 联合索引最左匹配


    假设有联合索引 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;
     
  • 相关阅读:
    nginx反向代理下没有获取到正确的clientIP问题发散
    TPL概要
    OAuth2:Authorization Flows
    ArrayList部分源码解析
    二分法之通用模板
    Leetcodet题目解析-1 c++版
    git初始用+将git项目上传到github
    参加ACM省赛有感
    杭电acm 1274展开字符串
    杭电acm 1263水果
  • 原文地址:https://www.cnblogs.com/liang545621/p/9401460.html
Copyright © 2020-2023  润新知