有一个大字段, 统计包含 "/123 /" 这样的字符串的数据. 试了contains(text, "/123 /") 效率很高,  但是 "/" 被忽略了.又试了 instr(text, "/123 /") 结果正确了, 但是效率很差. 
求大大指教 如何能在大字段中高效的匹配出这样带符号的字符串.

解决方案 »

  1.   


    --效率我就不清楚了,如果123不是固定的,换成正则字符就可以了
    select * from 你的表 where regexp_like('%/123 /%',text);
      

  2.   

    感谢2楼,3楼,
    试了一下, 效率比instr更差, 4W条数据, instr 2秒, regexp_like 12秒. 不行啊, 还有别的方法么? 在线等, 谢啦.我的测试SQL
    select * from table where regexp_like(text,   '.*\/123 \/.*'   )select * from table where instr(tpc.taddtext,   '/123 /'   ) >0
      

  3.   

    4W条,使用instr,2秒返回,不错了!我不相信还有什么方法比instr更快,你是要在程序中使用吗?如果不是在程序中使用的话,2秒都嫌慢,那就没办法了.
    如果是在程序中使用的话,建议分页,先返回一页,1000条或一页2000条,分页的话就必要要建索引了.
      

  4.   

    oracle处理字符串的速度本身就是比较慢的.为啥存储clob而不是xmltype呢?
      

  5.   

    修改了contains索引的创建参数, 解决.