oracle 10g需要用到模糊匹配的功能,使Oracle对字符串的大小写不敏感。目前想到的几个解决方案:0。alter session。 不现实,而且用了这个就会全表搜索,超慢。1。lower(name) like lower('%$name$%')。 性能太低2。在1的基础上建立函数索引。 治标不治本,说不定性能更低
再次请教各位大大,有没有更好的办法解决此问题。
再次请教各位大大,有没有更好的办法解决此问题。
解决方案 »
- Oracle中重新导入.sql.文件出现的问题
- 请教行转列问题
- 求救:无法连接数据库,但是我ping ip 地址却连接的上
- 一个获取oracle日期的问题啊 急啊 高手们请进 在线等待!!!
- 求救,关于rman错误的问题。
- 我将两个函数定义在一个*.sql文件中,在编译是,却不能编译通过,怎么回事?分开后编译,正常通过.
- oracle数据库安装在物理机上 ,在虚拟机中访问数据库,一直显示无监听程序
- 什么函数可以从右边开始取字符?
- 在单机上安装了oracle8i标准版能否使用大部分的功能?(想要入门的菜鸟,求教高手)
- 问一个关于Inser的问题?
- QQ信息存储的表设计?
- 怎样在SQLLDR失败后,把SQLLDR锁定表释放?
SELECT * FROM DUAL WHERE regexp_like('aBcde','bc','i');
SELECT * FROM DUAL WHERE regexp_like('abcde','Bc','i');
SELECT * FROM DUAL WHERE regexp_like('abcde','Bc','c');第三个参数'i'或'c'表示对大小写是否敏感,'i'表示不敏感,'c'表示敏感关于正则表达式详见
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_regexp.htm#i1010949
其次,其实这个做法也就是变相的函数索引,所以我认为你还是建立函数索引试验一下。
至于正则表达式是否能够提高效率,我持观望态度。
举个例子CREATE TABLE strs (str VARCHAR2(10));
INSERT INTO strs VALUES('ABCD');
INSERT INTO strs VALUES('AbCD');
INSERT INTO strs VALUES('ABcD');
INSERT INTO strs VALUES('AbcD');
commit;SELECT * FROM strs WHERE regexp_like(str,'bc','i');
SELECT * FROM strs WHERE regexp_like(str,'Bc','i');SELECT * FROM strs WHERE regexp_like(str,'bc','c');
SELECT * FROM strs WHERE regexp_like(str,'Bc','c');
4楼的解法似乎会比lower更低效。
为什么"似乎会比lower更低效",能解释一下吗?
不过建索引函数还是首选啊!
不过大家是不是把问题扯远了,这个问题核心是执行计划的优化,而不是函数执行速度的比较。
大家说说自己的观点吧,
我觉得正路是对函数建立索引。