select TS.SHBNO,
       TS.PAPERNO,       
       TS.LINENUM,       
       TS.FIRSTNAME,
       TS.LASTNAME,
       TS.NAME_C,
       TS.CUSNUM,
       TS.DELFLAG,
       TS.FILECRC32,
  from TB_SHB_KH_INFO_TMP TS, TB_KK_TASK_INFO TK, TB_SHB_SPLITFILE_INFO TF
  where TK.TASKID = TF.TASKID
   and TF.FILECRC32 = TS.FILECRC32
   and (TS.LINENUM between TF.STARTNUM and TF.ENDNUM)
   and ((TK.POINTNO = '22100') and (TK.FLAG = '1'))
 order by TS.CUSNUM desc, length(TS.NAME_C) desc, TS.LINENUM asc这是项目中的一个sql 
查询速度很慢  能不能优化一下 还有 select TS.SHBNO,
       TS.PAPERNO,
       TS.LINENUM,
       TS.FIRSTNAME,
       TS.LASTNAME,
       TS.NAME_C,
       TS.CUSNUM,
       TS.DELFLAG ,
       TS.FILECRC32
from TB_KK_TASK_INFO TK
left join TB_SHB_SPLITFILE_INFO TF
on TF.TASKID = TK.TASKID
left join TB_SHB_KH_INFO_TMP TS
on TS.FILECRC32 = TF.FILECRC32
and (TS.LINENUM between TF.STARTNUM and TF.ENDNUM)
order by TS.CUSNUM desc, length(TS.NAME_C) desc, TS.LINENUM asc这句话报ORA-00933: SQL 命令未正确结束 为什么
谢谢

解决方案 »

  1.   

    1、第一个sql最好用left join,效率会高一些具体可以看执行计划。
    2、order by 后边不允许出现length(TS.NAME_C)函数表达式的。
      

  2.   

    第二个sql在第一个左连接就报错了 求赐教
      

  3.   

    不建议这样子写order by ,太费时!
      

  4.   

    那就检查一下你的表明或者字段名写没写错,order by之后sql效率都不高
      

  5.   

    先不用order by查询试试看速度有改进没
    如果可以,在TK.TASKID、TK.POINTNO、TK.FLAG 
    TF.TASKID、TF.FILECRC32、TF.STARTNUM 、TF.ENDNUM
    TS.FILECRC32、TS.LINENUM 
    上建索引