查看: 4277|回复: 24

哪位帮忙看看这个语句有没有可能优化

[复制链接]
论坛徽章:
15
ITPUB元老
日期:2005-04-13 09:47:24管理团队成员
日期:2013-06-05 17:37:00ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主6段
日期:2012-08-09 02:21:03ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36ITPUB年度最佳版主
日期:2011-04-08 18:37:09BLOG月度发帖之星
日期:2010-05-01 02:15:42ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44会员2007贡献徽章
日期:2007-09-26 18:42:10
发表于 2011-5-12 20:58 | 显示全部楼层 |阅读模式
update ztcode a set zdesc_zh=(select TTEXT from sapsr3.tstct where ztcode=TCODE and SPRSL='1') where exists (select 1
from sapsr3.tstct b
where a.ztcode=b.TCODE
)
/

其中ztcode表大概10万条记录,tstct表大概30-40万条记录。
现在执行一下要将近半个小时。
论坛徽章:
311
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
发表于 2011-5-12 21:11 | 显示全部楼层
若是一次行动作,考虑用CREATE TABLE ztcode 来重新组织数据,效率可能更高些.

使用道具 举报

回复
论坛徽章:
311
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
发表于 2011-5-12 21:32 | 显示全部楼层
楼主,先说明要修改的数据量,及语句的执行计划.

使用道具 举报

回复
论坛徽章:
18
紫蛋头
日期:2011-07-25 08:06:53咸鸭蛋
日期:2011-12-27 11:35:38鲜花蛋
日期:2012-01-11 11:08:36奥运会纪念徽章:射击
日期:2012-09-11 08:56:18奥运会纪念徽章:体操
日期:2012-10-25 09:07:51紫蛋头
日期:2012-12-10 13:46:51灰彻蛋
日期:2013-01-28 14:23:202013年新春福章
日期:2013-02-25 14:51:24
发表于 2011-5-12 22:08 | 显示全部楼层
表是不是有碎片哦,看一下表有多少个block,贴一下执行计划吧,这样奇怪的问题比较有意思。

使用道具 举报

回复
论坛徽章:
10
2011新春纪念徽章
日期:2011-02-18 11:43:342015年新春福章
日期:2015-03-06 11:58:18懒羊羊
日期:2015-03-04 14:52:11马上有钱
日期:2014-02-18 16:43:092014年新春福章
日期:2014-02-18 16:43:09优秀写手
日期:2013-12-18 09:29:11三菱
日期:2013-08-30 20:37:412013年新春福章
日期:2013-02-25 14:51:24ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51暖羊羊
日期:2015-06-22 15:51:36
发表于 2011-5-12 22:41 | 显示全部楼层
目前该sql的执行计划是什么  楼主可以贴出来看看

另外,ztcode和tcode上有没有索引

使用道具 举报

回复
论坛徽章:
15
ITPUB元老
日期:2005-04-13 09:47:24管理团队成员
日期:2013-06-05 17:37:00ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主6段
日期:2012-08-09 02:21:03ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36ITPUB年度最佳版主
日期:2011-04-08 18:37:09BLOG月度发帖之星
日期:2010-05-01 02:15:42ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44会员2007贡献徽章
日期:2007-09-26 18:42:10
 楼主| 发表于 2011-5-12 22:43 | 显示全部楼层
我已经建了个索引是字段ztcode的,这个是唯一的字段。

使用道具 举报

回复
论坛徽章:
15
ITPUB元老
日期:2005-04-13 09:47:24管理团队成员
日期:2013-06-05 17:37:00ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主6段
日期:2012-08-09 02:21:03ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36ITPUB年度最佳版主
日期:2011-04-08 18:37:09BLOG月度发帖之星
日期:2010-05-01 02:15:42ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44会员2007贡献徽章
日期:2007-09-26 18:42:10
 楼主| 发表于 2011-5-12 22:44 | 显示全部楼层
原帖由 ZALBB 于 2011-5-12 21:11 发表
若是一次行动作,考虑用CREATE TABLE ztcode 来重新组织数据,效率可能更高些.

这个table因为是根据其他表生成的,所以我每次执行前都是先drop掉再重新建的。

使用道具 举报

回复
论坛徽章:
15
ITPUB元老
日期:2005-04-13 09:47:24管理团队成员
日期:2013-06-05 17:37:00ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主6段
日期:2012-08-09 02:21:03ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36ITPUB年度最佳版主
日期:2011-04-08 18:37:09BLOG月度发帖之星
日期:2010-05-01 02:15:42ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44会员2007贡献徽章
日期:2007-09-26 18:42:10
 楼主| 发表于 2011-5-12 22:47 | 显示全部楼层
原帖由 ZALBB 于 2011-5-12 21:32 发表
楼主,先说明要修改的数据量,及语句的执行计划.

ztcode表是10万条多点的记录,但是实际更新的好像也就几万条,现在看不到那个结果了。

我来找个帖子看看怎么看执行计划,oracle现在基本不会了,不用就是会生疏呀。

使用道具 举报

回复
论坛徽章:
15
ITPUB元老
日期:2005-04-13 09:47:24管理团队成员
日期:2013-06-05 17:37:00ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主6段
日期:2012-08-09 02:21:03ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36ITPUB年度最佳版主
日期:2011-04-08 18:37:09BLOG月度发帖之星
日期:2010-05-01 02:15:42ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44会员2007贡献徽章
日期:2007-09-26 18:42:10
 楼主| 发表于 2011-5-12 22:48 | 显示全部楼层
原帖由 jdw618 于 2011-5-12 22:08 发表
表是不是有碎片哦,看一下表有多少个block,贴一下执行计划吧,这样奇怪的问题比较有意思。

看多少block也不会,哈哈,我来找资料看。

使用道具 举报

回复
论坛徽章:
2
2011新春纪念徽章
日期:2011-02-18 11:42:49ITPUB十周年纪念徽章
日期:2011-11-01 16:25:22
发表于 2011-5-12 22:48 | 显示全部楼层
我觉得你这个语句 写成一个for 循环来做update 效果可能好一点。
for c in  ( select b.id,ttext from sapsr3.tstct a,ztcode  b
            where a.ztcode=TCODE and SPRSL='1' and b.ztcode=a.TCODE)
loop
        update ztcode   set zdesc_zh=c.ttext where id =c.id;
end loop;

基本上就是这个意思。不行的话就用bulk collect吧

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


----------------------------------------

大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表