前提:索引是创建好并且没有失效的
1.sql层面
1.1)not in, not exist,会导致索引失效
1.2)like '%_' 百分号在前面,会导致索引失效
1.3)对索引列进行运算操作,会导致索引失效
eq:select t.*,t.rowid from tf_b_paylog t where t.acct_id-1=100
1.4)隐式转换会导致索引失效(重点)
表字段定义为varchar类型,但在查询时把该字段作为number类型以where条件传给oracle。
1.5)对索引使用内部函数回导致索引失效
解决方案:建立函数索引
2.表层面
2.1)对小表进行查询
2.2)建立的索引必须是变换量大
2.3)没有进行表分析
3.组合(复合)索引
使用复合索引的时候,按照最左优先原则
eq:一个表中有A、B、C三个字段组合的复合索引,按照A、AB、AC、ABC去查询都会走索引,如果按照其他组合形式的索引去查询,并不会走索引。