免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1967 | 回复: 1
打印 上一主题 下一主题

SQL优化,请各位GGJJ踊跃发言 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-19 17:09 |只看该作者 |倒序浏览
SQL语句如下:
INSERT INTO TEMP_CON_CHECK_01
  SELECT WMMCU,
         'IM',
         WMDOCO,
         WMCPIT,
         WMCPIL,
         ILDCT,
         WMUORG / 10000,
         -WMTRQT / 10000,
         SUM(CASE
               WHEN WMUM = ILTRUM THEN
                ILTRQT / 10000
               ELSE
                ILTRQT / 10000 * GETUMCONV('PD810', ILITM, ILTRUM, WMUM)
             END),
         0
    FROM PRODDTA.F4801
    JOIN PRODDTA.F3111 ON WADOCO = WMDOCO
    LEFT JOIN PRODDTA.F4111 ON WMDOCO = ILDOC
                           AND ILDCT = 'IM'
                           AND ILLNID = WMCPNB * 10
   WHERE WMUPMJ BETWEEN 108001 AND 108365
     AND WASRST <= '96'
   GROUP BY WMMCU,
            WMDCTO,
            WMDOCO,
            WMCPIT,
            WMCPIL,
            ILDCT,
            WMUORG,
            WMTRQT,
            WMCPNB
  HAVING - WMTRQT / 10000 <> SUM(NVL(CASE WHEN WMUM = ILTRUM THEN ILTRQT / 10000 ELSE ILTRQT / 10000 * GETUMCONV('PD810', ILITM, ILTRUM, WMUM) END, 0));



三个表的记录数如下:
F4801(1170917)
F3111(7833351)
F4111(12761866)

另外想问一下,采用join的方式和使用from A, B where的方式在Oracle里面有区别吗? Oracle优化器是否对这两种不同的表链接方式有着不同的处理方式。
多谢各位的帮忙!

[ 本帖最后由 yslaoniu 于 2008-8-24 08:59 编辑 ]

1.GIF (19.5 KB, 下载次数: 35)

1.GIF

2.GIF (183.36 KB, 下载次数: 45)

2.GIF

论坛徽章:
0
2 [报告]
发表于 2008-08-20 08:20 |只看该作者
join 分为out join  和 inner join  如果是外连接,一般不会丢失一些想要的数据,如果是内连接,可能会过滤掉某些没有连接到一起的记录。至于你说的两种方式,需要在不同的环境中使用explain 查看一下执行计划才能确定哪种连接方式更好
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP