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可以在索引里加上函数395oracle 索引失效是怎么回事?
先确定是否是索引失效,SQL语句是否用到了索引。把索引的字段放到where条件的第一个。大部分都是SQL语句没用到索引,误以为是索引失效。全表查询时不会用到索引的。 参考技术A 是不是你的表太大,temp表空间爆了;报什么错,贴上来看看
以上是关于oracle查询语句用instr函数后 索引失效是怎么回事的主要内容,如果未能解决你的问题,请参考以下文章