• 复合(组合)索引失效的几种情况总结


    1、复合索引绑定的第一个列,没有出现在查询条件中;
    举例说明:为emp表插入索引idx_age_deptid_name(age,deptid,name),但是在查询条件中未使用age,导致复合索引全部失效。

    2、复合索引绑定的多个列是有顺序的,某一个列没有出现在查询条件中,存储引擎不能使用索引中该列及其后的所有列。
    举例:为emp表插入索引idx_age_deptid_name(age,deptid,name),查询时查询条件里没有deptid列,会导致复合索引中的deptid及其后的索引失效。

    3.查询条件中出现某个列是范围查询的,存储引擎不能使用复合索引中该列其后的所有列。
    举例:为emp表插入索引idx_age_deptid_name(age,deptid,name),查询时查询条件里deptid列使用到了范围查询,会导致复合索引中的deptid其后的索引失效。

    4.查询条件中某列使用否定条件的(!= <> IS NOT NULL),存储引擎不能使用索引中该列其后的所有列。
    举例:为emp表插入索引idx_age_deptid_name(age,deptid,name),查询时查询条件里deptid列使用到了否定条件,会导致复合索引中的deptid其后的索引失效。

    5.查询条件中某列使用LIKE条件后的字段是以%开头的(如:’%ABC’),存储引擎不能使用索引中该列及其后的所有列。
    举例:为emp表插入索引idx_age_deptid_name(age,deptid,name),查询时查询条件里name列使用到了like ‘%a’,会导致复合索引中的name及其后的索引失效。

    6.查询条件中某列使用函数的,存储引擎不能使用索引中该列及其后的所有列。
    举例:为emp表插入索引idx_age_deptid_name(age,deptid,name),查询时查询条件里name列使用到了like ‘%a’,会导致复合索引中的name及其后的索引失效。

    7.查询条件中某列使用类型转换的(包括显示的和隐示的),存储引擎不能使用索引中该列及其后的所有列。
    如:字符串类型的列NAME=3,就是隐示的类型转换,将INT型转换为字符串类型。如果写为NAME=’3’,就不是类型转换。
    举例:为emp表插入索引idx_age_deptid_name(age,deptid,name),查询时查询条件name=3,会导致复合索引中的name及其后的索引失效。条件写成name=‘3’,索引就不会失效。

  • 相关阅读:
    2019上海网络赛 F. Rhyme scheme 普通dp
    2019牛客多校第七场E Find the median 权值线段树+离散化
    2019南昌网络赛  I. Yukino With Subinterval 树状数组套线段树
    ACM-ICPC 2018 徐州赛区网络预赛 I. query 树状数组
    计算机专业 程序员技术练级攻略(转载)
    HDU 3642 求体积交集
    2019牛客暑期多校训练营(第三场)F Planting Trees 单调队列
    Manthan, Codefest 16 G. Yash And Trees dfs序+线段树+bitset
    POJ 1177 矩形周长并 模板
    HDU 4614 线段树+二分查找
  • 原文地址:https://www.cnblogs.com/xiangshihua/p/16166455.html
Copyright © 2020-2023  润新知