select nvl(SUM(t.nnum),0) from  so_saleorder_b t  where 
bboutendflag='N' 
AND csendstordocid in('1001A110000000001CFB','1001A1100000000BNAUI') 
and cmaterialvid = 
(select pk_material as cmaterialvid from bd_material where code='0000001' and enablestate=2 and dr=0)
and csaleorderid in (select csaleorderid from so_saleorder where fstatusflag=1 and dr=0)
最后一个 csaleorderid in (select csaleorderid from so_saleorder where fstatusflag=1 and dr=0)这个语句查询每次都花费好几秒钟,求问优化的计划

解决方案 »

  1.   

    改用exists
      

  2.   

    so_saleorder表增加 fstatusflag、 dr字段的索引试试
      

  3.   

    so_saleorder_b 增加复合索引csaleorderid 、csendstordocid 、cmaterialvid ,并把in改成exists
      

  4.   

    看不到执行计划有没有走索引,还是走全表扫描,select pk_material as cmaterialvid from bd_material where code='0000001' and enablestate=2 and dr=0)
     and csaleorderid in (select csaleorderid from so_saleorder where fstatusflag=1 and dr=0这句慢看是否走了索引,把in改exists.