暂无图片
这个sql怎么进行优化
我来答
分享
Edward
2022-09-21
这个sql怎么进行优化

1、sql 代码
UPDATE EAS1.T_AP_OTHERBILL SET CFCOMPANYTYPE=‘mz’ WHERE FID IN ( SELECT A.FID FROM EAS1.T_AP_OTHERBILL A LEFT JOIN EAS1.T_ORG_COMPANY B ON A.FCOMPANYID =B.FID WHERE A.CFCOMPANYTYPE IS NULL AND TO_CHAR(A.FBIZDATE,‘yyyy-mm-dd’)>‘2019-07-01’ AND (INSTR(B.FNUMBER,‘MZ’)> 0 OR INSTR(B.FNUMBER,‘YY’)> 0 OR INSTR(B.FNUMBER,‘ZH’)> 0 ))
2、执行计划
image.png

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
布衣
暂无图片

截图发现,看不清

and TO_CHAR(A.FBIZDATE, ‘yyyy-mm-dd’)>‘2019-07-01 ’ -- 你这种写法,如果A.FBIZDATE有索引,也不会走,需要改成: A.FBIZDATE>to_date('2019-07-01','yyyy-mm-dd') and (INSTR(B.FNUMBER,‘MZ’)> 0 or INSTR(B.FNUMBER,‘YY’)> 0 or INSTR(B.FNUMBER,‘ZH’)> 0 )) -- B.FNUMBER 加索引或函数索引,你试一下,看看哪个效果好点
复制
暂无图片 评论
暂无图片 有用 1
打赏 0
暂无图片
zayki
2022-09-21
用到了,感谢指教。
布衣
暂无图片

image.png

我能想到的是这2点,你先测试一下,没有绝对性能最优,满足你的需求就行。

暂无图片 评论
暂无图片 有用 2
打赏 0
哇哈哈
2022-09-21
枫神

#赞;

暂无图片 评论
暂无图片 有用 0
打赏 0
Thomas

首先要建索引。

create indx idx1 on t_otherbill(fbizdate,cfcompanytype);

create indx idx2 on  t_org_company(fnumber);

查询语句要改写,把where放到left join之前,比如with t as (select xxx from t_otherbill where FBIZDATE>to_date('2019-07-01',‘yyyy-mm-dd) and CFCOMPANYTYPE IS NULL), s as (select ... from t_org_company where INSTR(B.FNUMBER,‘MZ’)> 0 OR INSTR(B.FNUMBER,‘YY’)> 0 OR INSTR(B.FNUMBER,‘ZH’)> 0) select fid from t left join s on t.FCOMPANYID =s.FID

其实有时候,光帖SQL语句没有多大用,要真正解决问题,首先要说明相关表的定义,然后这个查询要实现什么业务逻辑,这样才能更准确地改善。看个大概的话,只能是建议加索引 

暂无图片 评论
暂无图片 有用 1
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
rac+adg恢复时的问题
回答 3
就是两套主备的意思?初始化是怎么迁移的数据?增量数据什么方式同步的?rac作为主库是被open过没?
oracle命令行下怎么查看表关系?
回答 1
已采纳
不好意思,不是很明白您的具体需求。是要看类似于A表与B表的关系吗?如果您已知A表的名称,根据获取A表的DDL定义来查,方法如下:SELECTDBMSMETADATA.GETDDL('TABLE','E
请问下这个错误是不是oracle 需要给驱动包授权网络连接权限呢?
回答 2
根据你截图中的报错判断应该是权限问题:应该是在截图中server没有赋予那个jar包connect和resolve权限。
数据迁移,创建表时sdo_geometry提示无效数据类型
回答 1
需要创建spatial用户和对象,或者看看这个表,可能是测试表,就可以忽略
A电脑的oracle 的视图能连接B电脑sql的视图吗?
回答 2
已采纳
DBLINK创建同义词
增量解析oracle redo的工具
回答 4
好的,谢谢请问有免费的吗?
oracle数据库整库迁移到另外一台linux上面,一般用什么工具?
回答 5
已采纳
OGG可以不停机迁移,先用RMAN或者数据泵导一下数据,然后OGG再追后面的数据
Oracle 怎么让主键重新按照顺序排序?
回答 1
已采纳
默认表创建的时候是堆表,数据是不按顺序存放的。查询的时候按照主键orderby排序即可。
数据库从11g升级到19c后会出现哪些问题?
回答 2
已采纳
1、数据库版本升级,一般都伴随着优化器的重大变更。所以升级后性能要特别注意,需要做优化2、如楼上所说,低版本和高版本之间通过DBLink互联,可能受到影响,主要取决于高SCN系统的高度https://
oracle有时间戳伪列吗?
回答 1
已采纳
你这个问题,常规来说基本无法实现。不过可以试试用触发器,每次修改这张表的数据时,触发记录时间节点和修改记录。但是会严重影响数据库性能。