12
返回列表 发新帖
楼主: newkid

替网友发帖:SQL调优问题

[复制链接]
论坛徽章:
0
11#
发表于 2023-1-10 01:36 | 只看该作者
newkid 发表于 2023-1-9 23:33
我看你的SQL还是有很多部分的UNION ALL,如果你已经知道哪一部分慢,只需单独贴出那一部分。计划也是。因为 ...

这段很慢,没有UNION的

sql2(1).sql

5.3 KB, 下载次数: 3

使用道具 举报

回复
论坛徽章:
0
12#
发表于 2023-1-10 01:38 | 只看该作者
没有UNION的SQL执行计划,把.txtqud3,为html文件

sql2ep(1).html.txt

63.46 KB, 下载次数: 1

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
13#
 楼主| 发表于 2023-1-10 01:55 | 只看该作者
你能不能用DBMS_XPLAN.DISPLAY_CURSOR输出文本型的计划?这个HTML计划看着非常费劲,我甚至无法对齐缩进。

你可以尝试的事情是加上 ap.GL_DATE 查询条件。目前你这个VIEW**的驱动条件是org_id,这样要访问大量数据,而你外层的条件竟然是在QT这个标量子查询的结果上,我看了一下它似乎由ap.GL_DATE决定。所以你的查询条件必须用ap.GL_DATE来做驱动,你要想办法把这个等价的条件弄出来。

另外可以尝试的是把下面这部分改写:

            AND (NOT EXISTS
                     (SELECT trx_id, trx_line_id
                        FROM zx_lines zl
                       WHERE     zld.trx_id = zl.trx_id
                             AND zld.trx_line_id = zl.trx_line_id
                             AND zl.INTERNAL_ORGANIZATION_ID =126
                                /* fnd_global.org_id*/))
改写成:
AND (zld.trx_id,zld.trx_line_id) NOT IN (
SELECT trx_id, trx_line_id
            FROM zx_lines zl
           WHERE zl.INTERNAL_ORGANIZATION_ID =126
                 AND trx_id IS NOT NULL AND trx_line_id IS NOT NULL
)
改写后的计划应该出现ANTI JOIN。
当然这样和原来有点不等价,你要确定一下是否那两个列非空。

使用道具 举报

回复
论坛徽章:
0
14#
发表于 2023-1-10 02:09 | 只看该作者
newkid 发表于 2023-1-10 01:55
你能不能用DBMS_XPLAN.DISPLAY_CURSOR输出文本型的计划?这个HTML计划看着非常费劲,我甚至无法对齐缩进。 ...

改写成*.txt了,谢谢

sql2-exp.txt

5.13 KB, 下载次数: 4

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
15#
 楼主| 发表于 2023-1-10 02:46 | 只看该作者
这下子就好看多了。ANTI JOIN已经出现,目前是NESTED LOOPS ANTI,你得看看HASH ANTI是不是会更好,但是现在主要问题是缺少驱动条件,几张大表上面都是全扫描,你得好好捋一下业务需求,看看最有效的过滤条件是什么。

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
16#
 楼主| 发表于 2023-1-10 03:30 | 只看该作者
这个标量子查询也可以改成 JOIN 试试:
(SELECT DESCRIPTION
               FROM apps.FND_LOOKUP_VALUES_VL
              WHERE     lookup_type = 'XXAR_UK_TAX_QT_MT'
                    AND lookup_code = TO_CHAR (ap.GL_DATE, 'MON-YYYY'))
                QT,   


修改后:
SELECT lu.DESCRIPTION as QT               
....
LEFT JOIN apps.FND_LOOKUP_VALUES_VL lu
  ON lu.lookup_type = 'XXAR_UK_TAX_QT_MT'
     AND lu.lookup_code = TO_CHAR (ap.GL_DATE, 'MON-YYYY')

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
17#
 楼主| 发表于 2023-1-10 05:21 | 只看该作者
主查询有个条件 QT='22SON'
这可以等价改写成 TO_CHAR (ap.GL_DATE, 'MON-YYYY')) = '相应年月'
需要人工把查询条件转换成 ap.GL_DATE BETWEEN 月初日期 AND 月末日期,具体数据需要查询 apps.FND_LOOKUP_VALUES_VL里面的 lookup_code,这样就有可能用上 ap.GL_DATE 的索引(假设这个索引已经存在)

使用道具 举报

回复

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

本版积分规则 发表回复

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