今天我用到了这样一组SQL语句,它所执行的表中有130万数据,
SELECT COUNT(a.A0100) AS zzPsnNum, SUM(isnull(a.A5830,0)) AS ZzNums, Gz_Tz_B001.B0105 as DwName, Gz_Tz_B001.B0110 as B0110
FROM (
SELECT A0100, B0110,CurrWageMonth,A5830 FROM Gz_Tz_Zz
UNION
SELECT A0100, B0110,CurrWageMonth, A6808 AS A5830 FROM Gz_Tz_Dgry
) AS a
RIGHT OUTER JOIN Gz_Tz_B001 ON a.B0110 = Gz_Tz_B001.B0110 AND a.CurrWageMonth = Gz_Tz_B001.currWageMonth
WHERE (Gz_Tz_B001.CurrWageMonth = '200806' And Gz_Tz_B001.B0110 like '037%' And Gz_Tz_B001.Codeid='UN' AND (Gz_Tz_B001.B0143 = '1') )
GROUP BY Gz_Tz_B001.B0110, Gz_Tz_B001.B0105,Gz_Tz_B001.OrderIDjg
ORDER BY Gz_Tz_B001.OrderIDJg
执行完上面这条语句用了24分钟。
我把SQL语句加了条件,修改成下面这样后,速度竟然快了 几百倍
SELECT COUNT(a.A0100) AS zzPsnNum, SUM(isnull(a.A5830,0)) AS ZzNums, Gz_Tz_B001.B0105 as DwName, Gz_Tz_B001.B0110 as B0110
FROM (
SELECT A0100, B0110,CurrWageMonth,A5830 FROM Gz_Tz_Zz where CurrWageMonth = '200806'
UNION
SELECT A0100, B0110,CurrWageMonth, A6808 AS A5830 FROM Gz_Tz_Dgry where CurrWageMonth = '200806'
) AS a
RIGHT OUTER JOIN Gz_Tz_B001 ON a.B0110 = Gz_Tz_B001.B0110 AND a.CurrWageMonth = Gz_Tz_B001.currWageMonth
WHERE (Gz_Tz_B001.CurrWageMonth = '200806' And Gz_Tz_B001.B0110 like '037%' And Gz_Tz_B001.Codeid='UN' AND (Gz_Tz_B001.B0143 = '1') )
GROUP BY Gz_Tz_B001.B0110, Gz_Tz_B001.B0105,Gz_Tz_B001.OrderIDjg
ORDER BY Gz_Tz_B001.OrderIDJg
其实就是让连接的左部分数据减少了,但是两条语句执行的结果一样的。
|