本帖最后由 u010900359 于 2013-08-07 15:47:50 编辑

解决方案 »

  1.   

    看的有点乱,Wat_OrgRole这个表一共出现了3次,看看有没有必要减少关联的次数。另外你的代码筛选性不强,大数据量会受不了的
      

  2.   

    这个SQL,只能从索引上来做优化,还有那个IN语句。请楼主给有每个字段前加别名限制,并给出各张表的数据量情况。
    SELECT DISTINCT
            a.Com_ID ,
            a.Com_Name ,
            a.Com_Delegate ,
            a.Com_ComCode ,
            a.Pro_Receipts ,
            Com_IsCetifYezz ,
            Com_IsCetifYzz ,
            Com_IsCetifWghcd ,
            Com_IsCetifghcp , --请说明这个字段属于哪张表.比如 a.Com_IsCetifghcp?
            Com_IsCetifCk ,
            Com_IsCetifZm ,
            Com_IsCetifHaccp ,
            Com_IsCetifIso ,
            Com_IsCetifGreen ,
            Com_ShowOrder ,
            s1.V_Text AS Com_QYXZ , --企业性质
            s2.V_Text AS Com_AuditorStatus --核查状态
    FROM    Wat_ComInfo a
            LEFT JOIN sys_FieldValue s1 
    ON s1.V_Code = a.Com_QYXZ_Dic
    AND s1.V_F_Key = 'ComQYXZKey' --企业性质
            LEFT JOIN sys_FieldValue s2 
    ON s2.V_Code = a.Com_AuditorStatus_Dic
    AND s2.V_F_Key = 'ComAuditorStatusKey' --核查状态
            LEFT JOIN Wat_FarmCertificate f 
    ON f.Com_ID = a.Com_ID --养殖证,请说出表中的数据量?
            LEFT JOIN Wat_ProComRelation c 
    ON c.Com_ID = a.Com_ID --产品与企业关系表
            LEFT JOIN Wat_ProductInfo d 
    ON d.Pro_ID = c.Pro_ID
    WHERE   Com_NewOldStatus_Dic = '1'
            AND Com_AreaCode IN  --请说明这个字段属于哪张表.比如 a.Com_AreaCode?
    (
    SELECT  f.AreaCode
    FROM    Wat_OrgRole f
    JOIN Wat_OrgInfo e 
    ON e.Org_ID = f.Org_ID
    JOIN org_user g 
    ON e.Org_Name = g.U_UnitName
    WHERE   g.UserID = '1' 
    )
      

  3.   


    Wat_ComInfo 这个主表的数据有4万多,子表Wat_FarmCertificate有5万多,其他表的数据不多。
      

  4.   

    把WHERE条件中IN的部分JOIN吧,效果会好些
      

  5.   

    楼主没必要优化,在4,5万的数据量下,这个SQL是完全OK的,要优化就把in那一部分换成exists子查询