T-SQL查询计划有助于选择最佳查询形式?

时间:2009-12-09 00:41:10

标签: tsql sql-execution-plan

我有一个简单的数据记录表,其中包含两个数据列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?

1 个答案:

答案 0 :(得分:2)

针对预期案例进行优化。

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