声明影响性能的情况。

时间:2012-10-15 07:16:33

标签: database oracle sybase

1-在Where条件的内部或外部影响性能的情况下,它会影响单个查询的查询计划的剂量,剂量会影响用于单个查询的索引的拣配。

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

示例:

 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'

1 个答案:

答案 0 :(得分:1)

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

我想如果你有三个不同的覆盖索引,每个查询对应一个UNION ALL - 并且优化器使用这些索引是有意义的,那么可能没什么区别。

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