我现在遇到一个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啥操作。
请教各位高手,如果才能实现,右匹配查询多个号码,而且能使用索引呢?(在线等)