0

我有一个简单的数据记录表,其中包含两个数据列 A 和 B,我想为其生成 A+B 的总和。但是,A 和 B 中的一个或两个都可以为空。该表还有一个时间戳列,它是主键

我可以看到几种给这只猫剥皮的方法,但我很想知道在一系列时间戳上汇总数据的首选方法是什么:

1. SUM(Coalesce(A,0)+Coalesce(B,0))

2. SUM(Coalesce(A+B,A,B,0))

3. Coalesce( Sum(A), 0) + Coalesce( SUM(B), 0)

我从执行计划程序中得到以下结果:

Form Select Compute Scalar Stream Aggregate Compute Scaler Clustered Index Seek
  1 0% 0% 11% 1% 87%    
  2 0% 0% 11% 1% 87%    

Form Select Compute Scalar Compute Scaler Stream Aggregate Clustered Index Seek
  3 0% 0% 0% 12% 88%    

我以前从未深入研究过查询计划,所以我不确定如何解释这些数字。公平地说,一般来说,总体百分比偏向右侧越多越好吗?使表格 3 优于表格 1 和表格 2?

4

1 回答 1

2

针对预期情况进行优化。

在这里,如果 A 和 B 大部分时间都有值,那么 #2 应该做得更好,因为合并将达到第一个值并停止。如果 A 或 B 经常为 NULL,您可能会使用 #1 做得更好。与往常一样,这里的关键是尝试两者并根据实际数据分析实际时间。

于 2009-12-09T00:46:41.613 回答