SELECT CASE WHEN ruhuo.theMisCode IS NOT NULL AND ruhuo.theMisCode <> '' THEN '已进仓' ELSE '' END AS cangkuFlag, a.*  FROM jijiaMisOrder a LEFT OUTER JOIN ruhuo ON a.misID = ruhuo.theMisCode order by a.id desc 这sql语句有办法优化吗?
jijiaMisOrder表只有几千条数据, ruhuo表里面有几十万条数据,由于ruhuo表的数据比较多,所以语句执行比较慢,需要5秒左右才有反应

解决方案 »

  1.   

    已经最简化了.
    你可以考虑对misID  , heMisCode建立索引了.
      

  2.   

    SELECT CASE WHEN isnull(ruhuo.theMisCode, '') <>  '' THEN '已进仓' ELSE '' END AS cangkuFlag, a.* FROM jijiaMisOrder a LEFT OUTER JOIN ruhuo ON a.misID = ruhuo.theMisCode order by a.id desc
      

  3.   

    1/ 如果jijiaMisOrder table中id有聚集索引并且是降序,这里不要用order by会快一些。
    2/ 如果“, a.* ”换成仅需的字段,也会好一些。相信你用不了那么多字段。比如a.id,a.misID..
    3/ 将ruhuo.theMisCode IS NOT NULL and ruhuo.theMisCode <> ''换到left join .. on 后面,先取非空结果集,而不是在所有数据中最后判断非空。以上不保证一定有效,建议尝试。
      

  4.   

    SELECT CASE WHEN ruhuo.theMisCode IS NOT NULL AND ruhuo.theMisCode <> '' 
    THEN '已进仓' ELSE '' 
        END AS cangkuFlag
        , a.* 
    FROM jijiaMisOrder a 
    LEFT OUTER JOIN ruhuo 
    ON a.misID = ruhuo.theMisCode 
    ORDER BY A.ID DESC
    选中这句话,ctrl + L看看执行计划,如果有table scan的地方则给相关字段加上Index。
      

  5.   

    看看ruhuo.theMisCode字段有没有索引吧,如果没有索引那么就建一个。能提高点速度。