SQL CASE vs JOIN效率

kd7*_*iwp 7 sql-server

在我的MS SQL Server数据库中,我根据一列中的各种不同代码提取交易数据.

是否更有效率:

  • 为WHERE子句中的每个代码反复连接相同的表

  • 在整个表格上做多个案例陈述(如下所示)

  • 在整个表上做多个case语句,但是用一个WHERE SubsidCde IN ('AA','BA','BB', etc)子句限制它

我们每秒运行这么多查询,即使我已经尝试了所有3种方法,但我没有得到明确的结果.

SELECT
    SUM(CASE WHEN Subsid_Cde = 'AA' THEN Trans_Amt END),0) [AA],
    SUM(CASE WHEN Subsid_Cde = 'BA' THEN Trans_Amt END),0) [BA],
    SUM(CASE WHEN Subsid_Cde = 'BB' THEN Trans_Amt END),0) [BB]
FROM
    Transactions

--  There are 8 more rows like this, using a different code for each line
Run Code Online (Sandbox Code Playgroud)

zvo*_*kov 4

如果您要对 Subsid_Cde 字段的所有可能(或大多数)值求和,则 CASE 会更快,因为它在汇总总和时不会多次扫描表。如果您只查找可能的 Subsid_Cde 字段的一小部分,那么单独的选择/连接(以及 Subsid_Cde 上的索引)会工作得更快。

你需要学会阅读执行计划,然后你就能够自己解决这些问题。

另外,您也可以对包含在 PIVOT 子句中的 Subsid_Cde 进行 GROUP BY(google for PIVOT MS SQL SERVER 2005)