【YashanDB知识库】decode函数中的子查询被不必要地多次执行

本文内容转自YashanDB官网,具体内容请见https://www.yashandb.com/newsinfo/7441387.html?templateId=1718516

问题现象

客户向yashandb下发的SQL语句执行时间超过6分钟仍未出结果

问题的风险及影响

SQL语句性能慢,影响客户业务

问题影响的版本

所有的yashandb 22.2版本

23.2版本没有这个问题

问题发生原因

decode函数在执行时判断有误,即使没有匹配到这个分支,这个分支中的子查询依然会被执行

解决方法及规避方式

规避方式:将decode改写为case when

问题分析和处理过程

通过分析如下ddl及最后sql语句的data block访问数量来判断是否有这个问题。

由于表a的pctfree设置了99,所以每个数据块中只有一条记录。此时这个表的全表扫描会有1000个左右的数据块。

对于最后的查询

select decode(rn,1,(select tname from a where tid = b.rn),‘abcd’) from ( select rownum rn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值