楼主: binary_1985

MSEG优化取值问题

[复制链接]
论坛徽章:
0
11#
 楼主| 发表于 2009-6-23 10:58 | 只看该作者
原帖由 hahappyppy 于 2009-6-23 08:29 发表
两点意见哦:
1.尽量多加筛选条件, 而且条件最好是索引
2.基于性能考虑 a.把能join的就不多写一个Select
                      b.把能join的就不用 FOR ALL ENTRIES IN
   所以把 VBAP 和MSEG的两次Select写成Join, 这样性能会有具体提升
你自己可以用SE30去看看执行效果


JOIN 也不行啊,又不一定所有SO都有入库记录的。

要LEFT JOIN的话,我在where还有条件就不好限制了。

使用道具 举报

回复
论坛徽章:
42
优秀写手
日期:2014-04-04 06:00:15奥迪
日期:2013-08-02 09:05:50技术图书徽章
日期:2014-05-13 10:13:15雪铁龙
日期:2013-09-27 17:12:25三菱
日期:2013-11-07 11:29:352013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:152010年世界杯参赛球队:阿根廷
日期:2010-07-07 13:46:09蛋疼蛋
日期:2013-06-06 10:40:32鲜花蛋
日期:2011-09-06 08:37:00
12#
发表于 2009-6-23 11:05 | 只看该作者
估计只有多加些筛选条件了 。。

使用道具 举报

回复
论坛徽章:
12
ERP板块每日发贴之星
日期:2007-09-30 01:04:37沸羊羊
日期:2015-03-04 14:43:43奥运会纪念徽章:篮球
日期:2012-09-07 13:16:522012新春纪念徽章
日期:2012-01-04 11:49:54双黄蛋
日期:2011-11-30 14:24:44祖国60周年纪念徽章
日期:2009-10-09 08:28:00开发板块每日发贴之星
日期:2007-10-23 01:04:24授权会员
日期:2007-10-22 11:44:53ITPUB元老
日期:2007-10-20 10:15:22ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
13#
发表于 2009-6-23 14:00 | 只看该作者
原帖由 binary_1985 于 2009-6-23 10:51 发表


入库记录,非发运出库。

请问是退货的销售订单吗?还是其他的方式产生的入库?如果是其他的方式,请说明一下

使用道具 举报

回复
论坛徽章:
12
ERP板块每日发贴之星
日期:2007-09-30 01:04:37沸羊羊
日期:2015-03-04 14:43:43奥运会纪念徽章:篮球
日期:2012-09-07 13:16:522012新春纪念徽章
日期:2012-01-04 11:49:54双黄蛋
日期:2011-11-30 14:24:44祖国60周年纪念徽章
日期:2009-10-09 08:28:00开发板块每日发贴之星
日期:2007-10-23 01:04:24授权会员
日期:2007-10-22 11:44:53ITPUB元老
日期:2007-10-20 10:15:22ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
14#
发表于 2009-6-23 14:57 | 只看该作者
TABLES:VBAP.
DATA:T_VBAP TYPE TABLE OF VBAP,
     T_VBAP1 TYPE TABLE OF VBAP,
     T_MSEG TYPE TABLE OF MSEG.
RANGES T_VBELN FOR VBAP-VBELN.
SELECT * INTO TABLE T_VBAP
  FROM VBAP
    UP TO *** ROWS
.

T_VBAP1[] = T_VBAP[].
SORT T_VBAP1 BY VBELN.
DELETE ADJACENT DUPLICATES FROM T_VABP1 COMPARING VBELN.
LOOP AT T_VBAP.
  T_VBELN-SIGN = 'I'.
  T_VBELN-OPTION = 'EQ'.
  T_VBELN-LOW = T_VBAP1-VBELN.
  APPEND T_VBELN.
ENDLOOP.
T_VBAP1[] = T_VBAP[].
SORT T_VBAP1 BY MATNR WERKS LGORT.
DELETE ADJACENT DUPLICATES FROM T_VBAP1 COMPARING MATNR WERKS LGORT.

SELECT MBLNR
    INTO TABLE T_MSEG
  FROM MSEG
    FOR ALL ENTRIES IN T_VBAP1
   WHERE MATNR = T_VBAP-MATNR
     AND WERKS = T_VBAP-WERKS
     AND LGORT = T_VBAP-LGORT
     AND BWART IN ()
     AND SOBKZ = 'E'
     AND MAT_KDAUF IN T_VBELN.
SORT T_VBAP1 BY VBELN POSNR.
T_MSEG1[] = T_MSEG[].
LOOP AT T_MSEG.
  W_LOOP = SY-TABIX.
  READ TABLE T_VBAP1 WITH KEY VBELN = T_MSEG-MAT_KDAUF
                              POSNR = T_MSEG-MAT_KDPOS BINARY SEARCH.
  IF SY-SUBRC <> 0.
      DELETE T_MSEG1 INDEX W_LOOP.
  ENDIF.
ENDLOOP.
你可以测试这个试试,最后T_MSEG1内表就是你要的资料了

使用道具 举报

回复
论坛徽章:
0
15#
 楼主| 发表于 2009-6-23 16:34 | 只看该作者
原帖由 sid056 于 2009-6-23 14:57 发表

RANGES T_VBELN FOR VBAP-VBELN.

你可以测试这个试试,最后T_MSEG1内表就是你要的资料了


很感谢LS的代码。

是不是把我的 FOR ALL ENTRIES IN T_VBAP里的MAT_KDAUF ,MAT_KDPOS换成 IN RANGES T_VBELN啊?

这样从语句上会取出我多余的数据,毕竟有的销售订单行我是不要取入库物料凭证的。

还有一个问题,RANGES 定义的内表,如果超过1000行,数据会溢出的...

使用道具 举报

回复
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:25:22
16#
发表于 2009-6-23 18:07 | 只看该作者
如果你使用了VBFA这个表,那么速度就根本不会存在问题了
去看看VBFA这个表的关联关系吧

使用道具 举报

回复
论坛徽章:
0
17#
 楼主| 发表于 2009-6-24 08:22 | 只看该作者
原帖由 wlm595 于 2009-6-23 18:07 发表
如果你使用了VBFA这个表,那么速度就根本不会存在问题了
去看看VBFA这个表的关联关系吧


VBFA里取不到我要的值的,它里面记录的销售订单行的出货凭证,不是我要的入库凭证。

使用道具 举报

回复
论坛徽章:
74
懒羊羊
日期:2015-02-26 16:31:30天蝎座
日期:2015-07-20 14:31:13
18#
发表于 2009-6-24 08:56 | 只看该作者
原帖由 binary_1985 于 2009-6-23 10:55 发表


我很奇怪:我限制了移动类型,取值反而慢了。

限制移动类型前:
  MSEG         ZMSEG  分别耗时:(ms)
  301,721     303,553
   308,478     291,292
   304,338     294,435
   293,659     300,808
   310,475     298,293

限制移动类型后:
  MSEG         ZMSEG  分别耗时:(ms)
   433,267     301,764
   435,131     305,864
   432,946     294,192
   431,085     301,490
   435,965     295,566

其中,VBAP5000条数据。


移动类型有没有加在索引里面?

sql语句中各个条件的顺序最好和索引里面的一样

另外不知道可不可以试试看用LDB来处理

使用道具 举报

回复
论坛徽章:
0
19#
 楼主| 发表于 2009-6-24 10:09 | 只看该作者
原帖由 rijkard 于 2009-6-24 08:56 发表


移动类型有没有加在索引里面?

sql语句中各个条件的顺序最好和索引里面的一样

另外不知道可不可以试试看用LDB来处理


移动类型加了,顺序与索引一致,还是比不加移动类型慢。

不过,LDB怎么处理呢?还请指教!

使用道具 举报

回复
论坛徽章:
0
20#
发表于 2009-6-24 11:13 | 只看该作者
如果你是针对读单表觉得会很慢的话。
注意按照表索引来。索引有单字段索引,有多字段联合索引。写SQL语句的时候关键字尽量和索引顺序一致,和表先后顺序一致。
多表,不太赞成用join

使用道具 举报

回复

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

本版积分规则 发表回复

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