Database 语句影响性能时的大小写。
1-当Where条件内部或外部影响性能时,是否会影响单个查询的查询计划,是否会影响用于单个查询的索引的选取 2-最好编写两个或多个查询,每个查询处理Case-when值的一个选项,而不是编写一个具有Case-when语句的查询 例如:Database 语句影响性能时的大小写。,database,oracle,sybase,Database,Oracle,Sybase,1-当Where条件内部或外部影响性能时,是否会影响单个查询的查询计划,是否会影响用于单个查询的索引的选取 2-最好编写两个或多个查询,每个查询处理Case-when值的一个选项,而不是编写一个具有Case-when语句的查询 例如: Select Acc , Case when Calculation_type = 'M' then Min_value when Calculation_type = 'E' then Ending_value Else Averag
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'
在这种情况下,第一个选项几乎肯定会更有效,因为它只要求您点击表(和/或表上的索引)一次,而不是三次(我假设您希望第一个查询有一个
WHERE calculation\u输入('a','E','m'))
以便结果与第二个查询匹配)
我假设,如果您有三个不同的覆盖索引,每个查询一个,您要将所有查询联合在一起,并且优化器使用这些索引是有意义的,那么可能差别不大
但是,假设您必须点击表格中的某些列,您可能希望能够读取一次表行并获取所有列值,而不是为三个不同的子查询读取三次块。Ok,让我们忘记Union all的情况:三个不同的查询比一个查询更好,特别是在处理大数据量时,从我的观点来看,3个优化的查询使用索引比一个查询进行完整扫描要好。@Tarek-好吧,忽略三个不同的查询忽略了查询之间最根本的区别。也就是说,当您的谓词是
WHERE calculation\u type IN('A','E','M')
时,没有什么可以阻止Oracle使用索引,因此没有特别的理由期望一个版本与其他版本相比进行特别的“调优”。如我所说,如果三个单独的查询有三个不同的覆盖索引,那么可能会出现一种情况,UNION-ALL
是有意义的,但这是极不寻常的。