ITPUB论坛-中国最专业的IT技术社区

 找回密码
 注册
查看: 1039|回复: 10

[性能调整] 帮忙改写下下面的SQL

[复制链接]
论坛徽章:
2
山治
日期:2017-01-05 15:30:04罗罗诺亚·索隆
日期:2016-12-19 18:43:41
发表于 2017-11-28 16:11 | 显示全部楼层 |阅读模式
这条SQL语句会产生大量的逻辑I/O,大家帮忙该写下,
delete from realestate.zl_report_t zl
  where exists (select a.transactionid
           from realestate.zl_report_t a, realestate.transaction_t b
          where a.transactionid = b.transactionid
            and a.districtid = b.districtid
            and b.typebid in
                (select r.typebcode from shsbjr.r_typeb_doccode r)
            and a.state = :"SYS_B_0"
            and a.transactionid = zl.transactionid
            and a.transactionid not in
                (select b.transactionid
                   from realestate.house_secret       a,
                        realestate.currentcer_house_t b
                  where a.house_id = b.house_id
                    and a.districtid = b.districtid)
            and to_char(a.passdate, :"SYS_B_1") <
                to_char(sysdate, :"SYS_B_2"));
论坛徽章:
304
奥迪
日期:2013-07-29 13:45:59红旗
日期:2014-02-07 10:47:20路虎
日期:2014-02-13 10:34:03保时捷
日期:2014-02-14 09:46:462014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
发表于 2017-11-28 22:13 | 显示全部楼层
比较复杂,最好理解SQL要求,了解业务数据特点后,再改写,

delete from realestate.zl_report_t
  where (transactionid is not null and districtid is not null)
    and (transactionid, districtid) in
        (select transactionid,districtid from realestate.transaction_t where typebid in (select typebcode from shsbjr.r_typeb_doccode))
    and a.state = :"SYS_B_0"
    and transactionid not in (select b.transactionid from realestate.house_secret a, realestate.currentcer_house_t b
                              where a.house_id = b.house_id and a.districtid = b.districtid)
          --and to_char(passdate, :"SYS_B_1") < to_char(sysdate, :"SYS_B_2")
          and passdate < sysdate

使用道具 举报

回复
认证徽章
论坛徽章:
8
2009新春纪念徽章
日期:2009-01-04 14:52:28祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:07:24ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262013年新春福章
日期:2013-02-25 14:51:24沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:57:31
发表于 2017-11-29 16:27 | 显示全部楼层
建议:
1、改成merge into语句试试;
2、贴执行计划看看;

使用道具 举报

回复
论坛徽章:
18
秀才
日期:2016-04-29 15:11:10秀才
日期:2017-04-05 13:27:59秀才
日期:2017-04-05 13:23:10秀才
日期:2017-04-05 13:23:10秀才
日期:2017-04-05 13:23:10秀才
日期:2017-04-05 13:22:59秀才
日期:2017-03-02 10:35:32秀才
日期:2017-01-20 11:06:21秀才
日期:2017-01-20 11:00:36秀才
日期:2017-01-20 11:04:31
发表于 2017-11-29 16:44 | 显示全部楼层
确认满足a.state = :"SYS_B_0"的数据是不是比较少,如果比较少尝试在a.state 字段上建立索引试试。

使用道具 举报

回复
认证徽章
论坛徽章:
8
2009新春纪念徽章
日期:2009-01-04 14:52:28祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:07:24ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262013年新春福章
日期:2013-02-25 14:51:24沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:57:31
发表于 2017-11-29 17:12 来自手机 | 显示全部楼层
abc_gdong 发表于 2017-11-29 16:44
确认满足a.state = :"SYS_B_0"的数据是不是比较少,如果比较少尝试在a.state 字段上建立索引试试。

这个可能不会少。

使用道具 举报

回复
论坛徽章:
18
秀才
日期:2016-04-29 15:11:10秀才
日期:2017-04-05 13:27:59秀才
日期:2017-04-05 13:23:10秀才
日期:2017-04-05 13:23:10秀才
日期:2017-04-05 13:23:10秀才
日期:2017-04-05 13:22:59秀才
日期:2017-03-02 10:35:32秀才
日期:2017-01-20 11:06:21秀才
日期:2017-01-20 11:00:36秀才
日期:2017-01-20 11:04:31
发表于 2017-11-29 18:05 | 显示全部楼层
那你删除数据的量很大吗?删除量大并且是olap应用考虑并行吧!

使用道具 举报

回复
认证徽章
论坛徽章:
8
2009新春纪念徽章
日期:2009-01-04 14:52:28祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:07:24ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262013年新春福章
日期:2013-02-25 14:51:24沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:57:31
发表于 2017-11-29 22:33 | 显示全部楼层
abc_gdong 发表于 2017-11-29 18:05
那你删除数据的量很大吗?删除量大并且是olap应用考虑并行吧!

应该是比较大,不然,楼主就不来问了。

使用道具 举报

回复
论坛徽章:
4
2014年新春福章
日期:2014-02-18 16:50:09马上有车
日期:2014-02-18 16:50:09优秀写手
日期:2014-10-21 06:00:13秀才
日期:2017-08-18 11:04:35
发表于 2017-11-30 09:56 | 显示全部楼层
没有执行计划,直接改写没多大效果 。

使用道具 举报

回复
认证徽章
论坛徽章:
8
2009新春纪念徽章
日期:2009-01-04 14:52:28祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:07:24ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262013年新春福章
日期:2013-02-25 14:51:24沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:57:31
发表于 2017-11-30 11:38 来自手机 | 显示全部楼层
paomananshan 发表于 2017-11-30 09:56
没有执行计划,直接改写没多大效果 。

赞成,关键是没有依据和方向。

使用道具 举报

回复
论坛徽章:
18
秀才
日期:2016-04-29 15:11:10秀才
日期:2017-04-05 13:27:59秀才
日期:2017-04-05 13:23:10秀才
日期:2017-04-05 13:23:10秀才
日期:2017-04-05 13:23:10秀才
日期:2017-04-05 13:22:59秀才
日期:2017-03-02 10:35:32秀才
日期:2017-01-20 11:06:21秀才
日期:2017-01-20 11:00:36秀才
日期:2017-01-20 11:04:31
发表于 2017-11-30 13:06 | 显示全部楼层
sqysl 发表于 2017-11-29 22:33
应该是比较大,不然,楼主就不来问了。

信息不全,只能猜测了

使用道具 举报

回复

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

本版积分规则

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