下面两个语句结果一个,写法不一样,能看出哪个快吗? 
sfb01 NOT LIKE '49%' 和            AND substr(sfb01,1,3) = smyslip  AND smydesc NOT LIKE '%补数%' 结果一样.-----------------------------------------------
       SELECT MAX(sfb15) 
          FROM sfb_file,ima_file
         WHERE  sfb01 NOT LIKE '49%'           
           AND sfb221 IS NULL           
           AND sfb05 = ima01 
           AND ima06 IN ('0301','0302','0304')
           AND sfb87 = 'Y'
           AND sfb22 = '90A-10050245'
           
         SELECT MAX(sfb15) 
          FROM sfb_file,smy_file,ima_file
         WHERE sfb221 IS NULL
           AND substr(sfb01,1,3) = smyslip 
           AND smydesc NOT LIKE '%补数%'
           AND sfb05 = ima01 
           AND ima06 IN ('0301','0302','0304')
           AND sfb87 = 'Y' 
           AND sfb22 = '90A-10050245'

解决方案 »

  1.   

    sfb01 NOT LIKE '49%' 和 AND substr(sfb01,1,3) = smyslip AND smydesc NOT LIKE '%补数%'只从语句上来看,应该是 sfb01 NOT LIKE '49%' 会更快
    因为 substr(sfb01,1,3) = smyslip  对每一行的“sfb01” 要进行SUBSTR处理,所以效率低,并且sfb01 如果是索引字段的话,substr(sfb01,1,3)是绝对不会用到索引的。不过最好还是从执行计划上去分析,看看那个更快。
      

  2.   

    sfb01 NOT LIKE '49%'
    AND substr(sfb01,1,3) = smyslip AND smydesc NOT LIKE '%补数%'
    就上面两个条件来说,如果sfb01列上建有索引,第一种是优于第二种的
    因为第二种对索引列进行运算及NOT LIKE'%补救%'根本使用不上索引!
      

  3.   

    用profile测试一下,cpu负载能力、sql语句性能,历历在目。
      

  4.   

    sfb01 NOT LIKE '49%' 和 AND substr(sfb01,1,3) = smyslip AND smydesc NOT LIKE '%补数%';
    你这2个sql的查询条件都不一样(查询满足的条件)。没有可比性。
    如果你真的需要比较他们间的差异的话,就只有看执行计划了。
      

  5.   

    最简单的方法 set timming on;
    看下执行前后时间差
      

  6.   

    建议不用substr
    效率不是特高