• 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

  • 相关阅读:
    滑动条使用
    jquery日历练习
    JQuery 教程
    JS获取各种宽度、高度的简单介绍
    如何获取元素位置
    DOM练习
    DOM
    函数
    假期练习
    Uva 253 Cube painting
  • 原文地址:https://www.cnblogs.com/xiangcaiduoyidian/p/14178332.html
Copyright © 2020-2023  润新知