oracle中decode函数如何提升查询语句性能的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle中decode函数如何提升查询语句性能的?相关的知识,希望对你有一定的参考价值。

目前我正在对程序中拼接的SQL语句进行调优,无意中看到一条建议:“使用DECODE函数来减少处理时间”。我在网上查询了decode函数,发现他是oracle独有的。
现在面临两个选择:
不理会这条建议
修改原有程序逻辑,加入decode语句的使用
问题是:引入decode后对原有SQL语句的执行效率帮助有多大,如果提升很多,即使拼接出来的SQL语句不具备可移植性,同时要修改程序逻辑都没关系。

decode可以代替case when语句,在语句写法上可以节省很多coding的时间
但是执行效率上其实与case when是差不多的
oracle特有这个函数的更多是为了方便使用,而不是效率考虑
参考技术A Oracle now supports simple and searched CASE statements. CASE statements are similar in purpose to the DECODE statement, but they offer more flexibility and logical power. They are also easier to read than traditional DECODE statements, and offer better performance as well. They are commonly used when breaking categories into buckets like age (for example, 20-29, 30-39, and so on).

并没有证据证明decode更快吧,查资料时倒是看到这么一句话case 方式“offer better performance as well”

额 刚发现你只是问decode··· 这个文档的内容是说decode 和 case when的比较···

oracle中decode函数有啥用?

参考技术A DECODE函数相当于一条件语句(IF).它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然,如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。区别于SQL的其它函数,DECODE函数还能识别和操作空值.
其具体的语法格式如下:
DECODE(input_value,value,result[,value,result…][,default_result]);
其中:
input_value
试图处理的数值。DECODE函数将该数值与一系列的序偶相比较,以决定最后的返回结果
value
是一组成序偶的数值。如果输入数值与之匹配成功,则相应的结果将被返回。对应一个空的返回值,可以使用关键字NULL于之对应
result
是一组成序偶的结果值
default_result
未能与任何一序偶匹配成功时,函数返回的默认值
下面的例子说明了,如何读取用户CHECKUP表SEAPARK中的BLOOD_TEST_FLAG列下的项目,作为DECODE函数的实参支持值。
SELECT
checkup_type,
DECODE(blood_test_flag,’Y’,’Yes’,’N’,’No’,NULL,’None’,’Invalid’)
FROM
checkup;

以上是关于oracle中decode函数如何提升查询语句性能的?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle decode函数

oracle decode()函数的参数原来可以为sql语句!

在 oracle 中的 case 或 decode 语句中使用 sum

oracleif判断语句

oracle怎么写IF语句?

如何查询Oracle性能监控