zoukankan      html  css  js  c++  java
  • OR查询是否会使得索引失效?

    OR查询是否会使得索引失效?

    并不会。因为mysql的查询优化器有一项技术叫[Index Merge Optimization],也就是index_merge优化.
    index_merge包含了3种算法来优化语句的逻辑:

    • Using intersect
      交集访问算法。当where语句的key条件以and结合,会以此算法访问做优化。
    • Using union
      合并访问算法。当where语句的key以or结合,key的条件可以是const,pk的条件可以是范围,会走此算法优化。
    • Using sort_union
      合并排序访问算法。基于union,当where语句的key(非pk)包含范围条件时,此访问算法适用。
      不同于union,这个算法,是先获取所有的行ID集合,然后排序返回。

    注意的是:

    1. index_merge优化无法适用于full-text index。
    2. index_merge需要配置optimizer_switch,也就是变量optimizer_switch里存在index_merge/index_merge_intersection/index_merge_union/index_merge_sort_union几个配置项,且值为on(show VARIABLES like 'optimizer_switch';
    3. 某些情况,例如小表,走索引查询的效率比全表扫描的代价更大,此时优化器会选择扫描全表。
    4. 此访问优化,仅适用于单个表的索引扫描,对于多个表的扫描合并不会生效。

    参考资料:

    8.2.1.3 Index Merge Optimization

  • 相关阅读:
    vue2 下载scss依赖包
    fastjson使用
    vscode format
    flutter 中涉的深拷贝
    通过pom给maven添加编译插件
    IDEA添加动态模板(Live Templates)
    Maven启动tomcat:run异常
    Redis
    tomcat启动时启动窗口出现乱码的解决方案
    无效的源发行版,解决方案
  • 原文地址:https://www.cnblogs.com/xiangcaiduoyidian/p/14178332.html
Copyright © 2011-2022 走看看