SQL代码发错了,上面是我小改了一点的SELECT ZY_Detail.[ChargeTypeCode],DIC_Person.[Name],ZY_Detail.[TotalFee] FROM ZY_Detail 
LEFT JOIN DIC_Person ON DIC_Person.[Id]=ZY_Detail.[DoctorId]
LEFT JOIN DIC_Office ON DIC_Office.[Id]=DIC_Person.[OfficeId]
WHERE ZY_Detail.[ChargeUserId] IS NOT NULL AND DIC_Office.[HospitalCode] LIKE '0101' AND ZY_Detail.[ChargeTime] BETWEEN '01  1 2009 12:00AM' AND '05  8 2009 12:00AM'
UNION ALL
SELECT MZ_Detail.[ChargeTypeCode],DIC_Person.[Name],MZ_Detail.[TotalMoney] FROM MZ_Detail 
LEFT JOIN MZ_Main ON MZ_Detail.[MZMainId]=MZ_Main.[Id]
LEFT JOIN DIC_Person ON DIC_Person.[Id]=MZ_Main.[DoctorId]
LEFT JOIN DIC_Office ON DIC_Office.[Id]=DIC_Person.[OfficeId] 
WHERE MZ_Detail.[ChargeUserId] IS NOT NULL AND  MZ_Main.[OriginTypeCode]='01' AND DIC_Office.[HospitalCode] LIKE '0101'AND MZ_Detail.[ChargeTime] BETWEEN '01  1 2009 12:00AM' AND '05  8 2009 12:00AM'
这才是原始的,跟上面提的问题相对应的SQL代码

解决方案 »

  1.   

    》》如果单查UNION ALL上面的一段,需要时间2秒,单查下面一段需要时间35秒,你的sql缓存导致了测试union all的时候占得了便宜...
      

  2.   

    在测试union all之前,他的两段数据已经都查询过了
      

  3.   

    测试前运行以下语句DBCC DROPCLEANBUFFERS
      

  4.   

    第一个语句如下两个先处理了
    LEFT JOIN DIC_Person 
    LEFT JOIN DIC_Office 
    第二个sql使用上面两个语句的结果集与MZ_Main 作用
    所以快乐
    如果你将第二个语句的连接顺序换一下也可以试试
    LEFT JOIN MZ_Main 
    LEFT JOIN DIC_Person 
    LEFT JOIN DIC_Office 改成
    LEFT JOIN DIC_Person 
    LEFT JOIN DIC_Office 
    LEFT JOIN MZ_Main 
      

  5.   


    每执行一次sql  都运行这个了吗
      

  6.   

    没有清理缓存吧?dbcc dropcleanbuffers