表中有一字段,值的格式如下(001,2|002,2|005,3|006,4),要怎样快速的找到该字段中包含值为002,2的记录,该表中的数据量较大(百万起步),除like外有没有比较快速的方法

解决方案 »

  1.   

    如果不用like,那么你可以用正则表达式啊,为什么不用like?
      

  2.   

    除了like,还可以用正则的regexp_like,但都不会是快速的方法,因为都执行全表扫描。
    可以的话,建议还是重新设计表结构和应用程序
      

  3.   

    --那用instr试试
      1* select * from emp where instr(ename,'MI',1,1)>0
    SQL> /     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
    ---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
          7369 SMITH      CLERK           7902 17-12月-80            800        900         20
          7934 MILLER     CLERK           7782 23-1月 -82           1300                    10
      

  4.   

    select instr('001,2|002,2|005,3|006,4','002,2') from dual
      

  5.   

    跟用不用instr关系不大,关键是将会全表扫描.oracle擅长的是记录检索,不是字符串处理.索引尽量使用记录的形式来存储,不要用字串拼有逻辑意义的数据组.