首页 > 其他分享 >【YashanDB知识库】decode函数中的子查询被不必要地多次执行

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

时间:2024-09-26 17:52:48浏览次数:3  
标签:语句 yashandb 知识库 查询 decode YashanDB rn select

本文内容转自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访问数量来判断是否有这个问题。

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

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

对于最后的查询

select decode(rn,1,(select tname from a where tid = b.rn),'abcd') from ( select rownum rn from dual connect by rownum < 5 ) b;

由于子查询b中有4条记录,分别为1 2 3 4,decode中只会匹配1,所以decode中对a表的全表扫描只有一次。

所以,正常情况下,整个select语句会有1000多的一致读。

但是如果yashandb存在decode函数的执行问题,也就是异常情况,

整个select语句会有4000多的一致读。

正常情况下的截图:

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

异常情况下的截图:

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

经验总结

使用statistics\_level=all及autotrace来分析sql语句的一致读数量,进而推断性能表现。

标签:语句,yashandb,知识库,查询,decode,YashanDB,rn,select
From: https://blog.51cto.com/u_16065869/12120476

相关文章

  • 用户体验分享 | YashanDB V23.2.3安装部署
    近期崖山新版体验过程中,总能看到用户提问:openssl版本问题、monit命令找不到问题、yashan用户权限问题、数据库重装问题今日整理了多位用户的安装经验,希望能够帮助到大家~1.Lucifer三思而后行:YashanDB个人版数据库安装部署2.小周的数据库进阶之路:国产库学习系列之yasha......
  • 【YashanDB知识库】YMP迁移oracle不兼容给用户授权高级包
    本文转自YashanDB官网,具体内容请见https://www.yashandb.com/newsinfo/7441382.html?templateId=1718516【标题】YMP迁移oracle不兼容给用户授权高级包【关键字】oracle迁移,高级包授权【问题描述】迁移评估任务中,oracle迁移YashanDB,YMP不兼容语句:grantexecuteonsys.dbms_sta......
  • 实操三步把知识库接到智能硬件上
    前言大模型作为一个语言模型,实际上没有真正的记忆功能。所谓的对话记忆只是开发者将对话历史向GPT发送消息时将最近的对话历史通过提示工程组发送给ChatGPT。换句话说,如果对话历史超过了大模型的最大上下文,GPT会忘记之前的部分,这是大语言模型共有的局限性。另外对专业领域知识的训......
  • 【YashanDB知识库】yashandb执行包含带oracle dblink表的sql时性能差
    本文内容来自YashanDB官网,具体内容请见https://www.yashandb.com/newsinfo/7396959.html?templateId=1718516问题现象yashandb执行带oracledblink表的sql性能差:同样的语句,同样的数据,oracle通过dblink访问远端oracle执行,耗时不到1秒钟:问题的风险及影响yashandb通过dblink访问oracle......
  • 【YashanDB知识库】查询YashanDB表空间使用率
    本文转自YashanDB官网,具体内容请见https://www.yashandb.com/newsinfo/7369203.html?templateId=1718516【问题分类】功能使用【关键字】表空间,使用率【问题描述】YashanDB使用过程中,如何查询表空间的使用率【问题原因分析】需要查询相应的YashanDB系统表,计算表空间使用率【解决/规......
  • 【YashanDB知识库】多表更新报错 YAS-04344 multi-table update is not supported
    本文内容来自YashanDB官网,具体内容请见https://www.yashandb.com/newsinfo/7369204.html?templateId=1718516【问题分类】功能使用【关键字】YAS-04344,UPDATE,multi-tableupdate,MERGEINTO【问题描述】在崖山环境执行类似以下语法进行多表更新报YAS-04344multi-tableupdate......
  • 【YashanDB知识库】多表更新报错 YAS-04344 multi-table update is not supported
    本文内容来自YashanDB官网,具体内容请见https://www.yashandb.com/newsinfo/7369204.html?templateId=1718516【问题分类】功能使用【关键字】YAS-04344,UPDATE,multi-tableupdate,MERGEINTO【问题描述】在崖山环境执行类似以下语法进行多表更新报YAS-04344multi-tableupdateisn......
  • 【YashanDB知识库】查询YashanDB表空间使用率
    本文转自YashanDB官网,具体内容请见https://www.yashandb.com/newsinfo/7369203.html?templateId=1718516【问题分类】功能使用【关键字】表空间,使用率【问题描述】YashanDB使用过程中,如何查询表空间的使用率【问题原因分析】需要查询相应的YashanDB系统表,计算表空间使用率【......
  • 【YashanDB知识库】YAS-04110 invalid variant name
    本文转自YashanDB官网,具体内容请见https://www.yashandb.com/newsinfo/7369202.html?templateId=1718516【标题】错误码处理【问题分类】查询语句报错【关键字】YAS-04110【问题描述】执行特定sql时,遇到相应报错【问题原因分析】字段中含有保留字,应使用双引号包裹字段名称【解决/规......
  • 【YashanDB知识库】如何配置jdbc驱动使getDatabaseProductName()返回Oracle
    本文转自YashanDB官网,具体内容请见https://www.yashandb.com/newsinfo/7352676.html?templateId=1718516问题现象某些三方件,例如工作流引擎activiti,暂未适配yashandb,使用中会出现如下异常:问题的风险及影响影响客户业务无法进行。问题影响的版本所有的yashandbjdbc驱动版本。问题......