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

  • 相关阅读:
    Keepalived安装使用详解
    Django缓存使用方法
    Django常用命令及参数配置(Django 1.8.6)
    Python之Rpyc模块
    Hadoop:实战Web日志分析
    Hadoop:使用Mrjob框架编写MapReduce
    Hadoop:使用原生python编写MapReduce
    Hadoop安装
    LGOJP1850 换教室
    BZOJ4318: OSU!
  • 原文地址:https://www.cnblogs.com/xiangcaiduoyidian/p/14178332.html
Copyright © 2011-2022 走看看