我现在遇到一个Oracle 10g查询,有一张表voice,有一个号码列MNumber varchar2(40),需要右匹配查询MNumber列,关键是要右匹配多个号码。
MNumber列有一个单列索引。
还是写代码表达一下吧,更清楚。
select * from voicerec where MNumber like '%12345' or MNumber like '%34567'
这种写法当然用不到索引了,不是我想要的,但表达了我查询的需求。
然后我就建立了一个函数索引reverse(MNumber),使用了如下的查询。
select * from voicerec where reverse(MNumber) like reverse('%12345')
这样是可以使用刚才那个函数索引的,还不错啦。
可但是,当我查询多个号码时,就悲剧了
select * from voicerec where reverse(MNumber) like reverse('%12345') or reverse(MNumber) like reverse('%34567')
查询计划又开始表扫描了!(加hint也不行的)
可是我在进行左匹配查询多个号码时,却可以用上MNumber上的索引,只不过看查询计划,里面还有个bitmap啥操作。
请教各位高手,如果才能实现,右匹配查询多个号码,而且能使用索引呢?(在线等)
MNumber列有一个单列索引。
还是写代码表达一下吧,更清楚。
select * from voicerec where MNumber like '%12345' or MNumber like '%34567'
这种写法当然用不到索引了,不是我想要的,但表达了我查询的需求。
然后我就建立了一个函数索引reverse(MNumber),使用了如下的查询。
select * from voicerec where reverse(MNumber) like reverse('%12345')
这样是可以使用刚才那个函数索引的,还不错啦。
可但是,当我查询多个号码时,就悲剧了
select * from voicerec where reverse(MNumber) like reverse('%12345') or reverse(MNumber) like reverse('%34567')
查询计划又开始表扫描了!(加hint也不行的)
可是我在进行左匹配查询多个号码时,却可以用上MNumber上的索引,只不过看查询计划,里面还有个bitmap啥操作。
请教各位高手,如果才能实现,右匹配查询多个号码,而且能使用索引呢?(在线等)
解决方案 »
- 本机安装oracle 10 g即时客户端出现下面的问题求 大神解决
- 用python访问oracle数据库
- 测试存储过程的时候报ora-01480的错误,怎么处理?
- 客户端几乎每天报ora 12560 协议适配器错误
- 怎么把select 出的数值结果加上千位符,比如1000,输出1,000
- 如何用命令行执行一个存储过程?
- oracle 安装问题!急
- 如何更改表空间,使表空间的区管理从“本地管理”变为“在字典中管理”
- 给大家一个关于控制文件的更新、日志组的切换顺序、热备份的机制的比较精彩的帖子
- 在plsql里面执行是没问题的 结果用jdbc查询的时候却报ORA-01861: 文字与格式字符串不匹配
- 有关Oracle区分单引号和不区分单引号的问题
- 急求,ProC编译环境设置问题
select * from voicerec where MNumber like '%12345'
union
select * from voicerec where MNumber like……