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'
答案 0 :(得分:1)
在这种情况下,第一个选项几乎肯定会更有效率,因为它只需要你一次击中表(和/或表上的索引)而不是击中它们三次(我假设你打算这样做)第一个查询有WHERE calculation_type IN ('A', 'E', 'M')
,以便结果与第二个查询匹配)。
我想如果你有三个不同的覆盖索引,每个查询对应一个UNION ALL
- 并且优化器使用这些索引是有意义的,那么可能没什么区别。
假设您必须为这些列中的某些列点击表,您可能希望能够读取表行一次并获取所有列值,而不是为三个不同的子查询读取块三次不同的时间。