2

1- 在 Where 条件内部或外部影响性能时执行案例,影响单个查询的查询计划,影响单个查询使用的索引的选取。

2- 最好编写 2 个或多个查询,每个查询处理一个 Case when 值的选项,而不是编写一个具有 case when 语句的单个查询。

例子:

 Select  Acc ,
 Case 
 when  Calculation_type  = 'M' then Min_value 
 when  Calculation_type  = 'E' then Ending_value
 Else 
 Average_BLC
 END
From Table 

选择

Select Acc ,    Min_value 
From Table 
where   Calculation_type  = 'M'
union all 
Select  Acc , Ending_value        
From Table 
where  Calculation_type  = 'E'
union all 
Select   Acc , Average_BLC       
From Table 
where Calculation_type  = 'A'
4

1 回答 1

1

在这种情况下,第一个选项几乎肯定会更有效,因为它只需要您点击表(和/或表上的索引)一次,而不是点击它们三次(我假设您打算进行第一个查询以WHERE calculation_type IN ('A', 'E', 'M')使结果与第二个查询匹配)。

我想如果你有三个不同的覆盖索引,一个用于你UNION ALL在一起的每个查询,并且优化器使用这些索引是有意义的,那么可能差别不大。

但是,假设您必须为其中一些列访问表,您可能希望能够读取表行一次并获取所有列值,而不是为三个不同的子查询读取块三个不同的时间。

于 2012-10-15T07:25:56.727 回答