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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM