暂无图片
这个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
暂无图片
zayki
2022-09-21
用到了,感谢指教。
布衣
暂无图片

image.png

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

暂无图片 评论
暂无图片 有用 2
农夫三拳
2022-09-21
枫神

#赞;

暂无图片 评论
暂无图片 有用 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
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏