oracle查询语句用instr函数后 索引失效是怎么回事

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle查询语句用instr函数后 索引失效是怎么回事相关的知识,希望对你有一定的参考价值。

instr(a.customername, '张娟') > 0 customername这个字段有索引,但查询的时候不走索引,而是全表查询,想请教大侠帮助

这个是正常的,使用函数就不走索引了,
如果你都是这样查的,可以在索引里加上函数。追问

这个instr函数怎么加索引啊。create index emp_upper_idx on emp(upper(ename));这个只用到字段,可是instr要用到用户输入的值,这个怎么处理呢?

追答

这个不知道了
想不出其他什么办法:-)

但是,你的查询条件,为什么不能 a.customername = '张娟'

追问

因为这是客户输入的,有可能只输入王、李、张这样的姓或是小明这样的名字,不能用=

追答

可不可以,customername存ID,另有一个表存的是ID和NAME,当输入的时候,先根据NAME到表里查出ID,这样就可以用上索引了。
但这同样有个问题就是NAME怎么快速查找的问题。但如果存NAME的表相应较小的话,还是可行的。

追问

应该不可以的,用户的输入是没办法控制的,可能他输入内容在表里根本就没有,也不可能将他输入的名字再建表,这样这张表不知道要多大了

参考技术A 这个是正常的,使用函数就不走索引了,如果你都是这样查的5173可以在索引里加上函数395

oracle 索引失效是怎么回事?

先确定是否是索引失效,SQL语句是否用到了索引。把索引的字段放到where条件的第一个。
大部分都是SQL语句没用到索引,误以为是索引失效。全表查询时不会用到索引的。
参考技术A 是不是你的表太大,temp表空间爆了;报什么错,贴上来看看

以上是关于oracle查询语句用instr函数后 索引失效是怎么回事的主要内容,如果未能解决你的问题,请参考以下文章

oracle 索引失效是怎么回事?

Oracle数据库索引使用及索引失效总结

oracle分析表,解决索引失效

oracle 优化 instr 替换 =

求助oracle like%.%模糊查询优化

oracle如何避免查询数据的时候索引失效