楼主: tangyuxint

[原创] 一次SQL优化经历分享

[复制链接]
论坛徽章:
8
马上有房
日期:2014-10-17 16:12:52优秀写手
日期:2014-12-06 06:00:14暖羊羊
日期:2015-03-04 14:54:572015年新春福章
日期:2015-03-06 11:59:47目光如炬
日期:2015-06-07 22:00:00秀才
日期:2015-07-14 09:44:30秀才
日期:2015-11-23 09:48:22狮子座
日期:2016-01-25 13:38:55
31#
 楼主| 发表于 2016-2-20 22:33 | 只看该作者
smallnavy 发表于 2016-2-19 15:25
你这个还算运气好的,有时不得不从业务逻辑着手优化。

是的 目前系统里好多类似的SQL 都是得先从业务下手

使用道具 举报

回复
论坛徽章:
5
2014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:112015年新春福章
日期:2015-03-04 14:19:112015年新春福章
日期:2015-03-06 11:57:31秀才
日期:2016-03-24 09:10:24
32#
发表于 2016-2-28 01:40 | 只看该作者
大致看了一下
个人以为mfg2和mfg3可以合并
disable_date可以为空不妥或以此为条件不妥
由下面条件看出结构性问题
mfg.segment1 NOT LIKE '_____EY%'
substr(mfg.segment1, length(mfg.segment1) - 2, 1) <> 'C'
效率低和union关系不大

使用道具 举报

回复
论坛徽章:
8
马上有房
日期:2014-10-17 16:12:52优秀写手
日期:2014-12-06 06:00:14暖羊羊
日期:2015-03-04 14:54:572015年新春福章
日期:2015-03-06 11:59:47目光如炬
日期:2015-06-07 22:00:00秀才
日期:2015-07-14 09:44:30秀才
日期:2015-11-23 09:48:22狮子座
日期:2016-01-25 13:38:55
33#
 楼主| 发表于 2016-2-29 09:38 | 只看该作者
alfah 发表于 2016-2-28 01:40
大致看了一下
个人以为mfg2和mfg3可以合并
disable_date可以为空不妥或以此为条件不妥

额,条件是业务上的逻辑,目前不会去更改的。
造成执行计划跑偏的原因确实是绑定变量缺陷和union all导致谓词推进失效导致的,执行计划我都专门一个个去比较了。
MFG2和MFG3是无法合并的,因为这个SQL语句里面是有层级关系的,我要查的是level 3的数据,当然可能改成connect by的递归可能看起来会清晰点。

使用道具 举报

回复
论坛徽章:
0
34#
发表于 2016-3-2 11:45 | 只看该作者
记下 有空学习

使用道具 举报

回复
论坛徽章:
8
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:522011新春纪念徽章
日期:2011-02-18 11:43:332013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02秀才
日期:2017-03-20 13:42:20秀才
日期:2017-07-11 13:54:02
35#
发表于 2016-3-17 07:55 | 只看该作者
我觉得一个好的数据库开发程序员,必须要熟练性能调优的。调优不只是DBA的工作!

使用道具 举报

回复
论坛徽章:
8
马上有房
日期:2014-10-17 16:12:52优秀写手
日期:2014-12-06 06:00:14暖羊羊
日期:2015-03-04 14:54:572015年新春福章
日期:2015-03-06 11:59:47目光如炬
日期:2015-06-07 22:00:00秀才
日期:2015-07-14 09:44:30秀才
日期:2015-11-23 09:48:22狮子座
日期:2016-01-25 13:38:55
36#
 楼主| 发表于 2016-3-17 12:26 | 只看该作者
samt007 发表于 2016-3-17 07:55
我觉得一个好的数据库开发程序员,必须要熟练性能调优的。调优不只是DBA的工作!

同感 哈哈~

使用道具 举报

回复
论坛徽章:
109
开发板块每日发贴之星
日期:2006-06-06 01:02:23数据库板块每日发贴之星
日期:2006-12-30 01:03:28每日论坛发贴之星
日期:2008-07-12 01:01:37行业板块每日发贴之星
日期:2008-07-23 01:02:20ITPUB元老
日期:2010-11-12 15:19:292014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02
37#
发表于 2016-4-7 17:32 | 只看该作者
感谢楼主分享

使用道具 举报

回复
论坛徽章:
59
优秀写手
日期:2015-02-12 06:00:132016猴年福章
日期:2016-02-23 09:58:34猴赛雷
日期:2016-02-23 10:04:24紫水晶
日期:2016-04-01 12:19:28双子座
日期:2016-04-28 10:19:29秀才
日期:2016-06-23 14:15:06奥运会纪念徽章:曲棍球
日期:2016-08-30 13:12:24奥运会纪念徽章:体操
日期:2016-09-26 11:24:37妮可·罗宾
日期:2016-10-25 13:54:46娜美
日期:2017-04-28 10:45:33
38#
发表于 2016-4-8 12:43 | 只看该作者
samt007 发表于 2016-3-17 07:55
我觉得一个好的数据库开发程序员,必须要熟练性能调优的。调优不只是DBA的工作!

同意,说的对

使用道具 举报

回复
论坛徽章:
6
咸鸭蛋
日期:2013-01-11 10:30:55优秀写手
日期:2013-12-19 06:00:122014年新春福章
日期:2014-02-18 16:47:53马上加薪
日期:2014-02-18 16:47:53慢羊羊
日期:2015-03-04 14:53:332015年新春福章
日期:2015-03-06 11:58:39
39#
发表于 2016-4-22 18:13 | 只看该作者
这种情况下,换成存储过程中间临时表来做可能会更好一些。

语句本身太复杂,维护起来很麻烦。

使用道具 举报

回复
论坛徽章:
1
秀才
日期:2016-08-05 10:28:31
40#
发表于 2016-6-16 17:36 | 只看该作者
感谢楼主分享

使用道具 举报

回复

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

本版积分规则 发表回复

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