这两个查询的性能比较

时间:2014-04-08 10:10:14

标签: sql sql-server query-optimization

我正在使用此查询来获取结果,其中Calander(主键:DAY_DATE)包含有关时间的所有连续信息(即日期,季度,年份等)和EXPENCE INCOMETXN_DATE都将列DAY_DATE作为 SELECT COALESCE(t1."FISCAL_YEAR",t2."FISCAL_YEAR") "FISCAL_YEAR" , "exp" "exp" , "rev" "rev" FROM (SELECT Calander.FISCAL_YEAR "FISCAL_YEAR" , (SUM("EXPENCE"."TXN_AMT" )) "exp" FROM Calander , EXPENCE WHERE "EXPENCE"."TXN_DATE"="Calander"."DAY_DATE" GROUP BY FISCAL_YEAR ) t1 FULL OUTER JOIN (SELECT Calander.FISCAL_YEAR "FISCAL_YEAR" , (SUM("INCOME"."TXN_AMT" )) "rev" FROM Calander , INCOME WHERE "INCOME"."TXN_DATE"="Calander"."DAY_DATE" GROUP BY FISCAL_YEAR ) t2 ON t1."FISCAL_YEAR"=t2."FISCAL_YEAR" ORDER BY COALESCE(t1."FISCAL_YEAR",t2."FISCAL_YEAR") 的外键。

SELECT
    FISCAL_YEAR "FISCAL_YEAR" ,
    (sum("EXPENCE"."TXN_AMT" )) "exp",
    (sum("INCOME"."TXN_AMT" )) "rev" 
FROM
    Calander ,
    EXPENCE FULL OUTER JOIN INCOME ON
    "EXPENCE"."TXN_DATE" = "INCOME"."TXN_DATE"
WHERE
    "EXPENCE"."TXN_DATE"="Calander"."DAY_DATE" and
    "INCOME"."TXN_DATE"="Calander"."DAY_DATE" 
GROUP BY 
    FISCAL_YEAR
ORDER BY
    FISCAL_YEAR

现在让查询更容易理解我做了这个

{{1}}

我在两个查询中得到相同的结果。在任何情况下结果都是不同的(Ist查询结果是正确的结果)? 什么会对绩效产生影响?

2 个答案:

答案 0 :(得分:1)

第二个应该更有效,但要验证它,检查实际的执行计划。

也设置了
SET STATISTICS IO ON
在会话上

并检查对真实数据的两个查询的逻辑读取。

另一个习惯 - 停止在标识符周围使用双引号,或准备在某些时候使用QUOTED_IDENTIFIER设置命中:)

答案 1 :(得分:0)

第二个查询将在性能方面更好。 在第一个查询中,您在两个子查询中使用连接来过滤数据,然后再次加入它们,而第二个查询更加优化,因为您通过连接所有三个表来过滤数据。更多建议,避免使用旧式连接使您的查询可读且更好。