我有一个简单的数据记录表,其中包含两个数据列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?
答案 0 :(得分:2)
针对预期案例进行优化。
这里,如果A和B在大多数时间都有值,那么#2应该做得更好,因为合并将达到第一个值并停止。如果A或B经常为NULL,那么#1可以做得更好。与往常一样,这里的关键是尝试两者并分析实际数据的实际时间。