楼主: binary_1985

MSEG优化取值问题

[复制链接]
论坛徽章:
11
2009新春纪念徽章
日期:2009-01-04 14:52:28ITPUB元老
日期:2009-04-11 21:27:42生肖徽章2007版:牛
日期:2009-06-08 00:31:34
21#
发表于 2009-6-24 11:36 | 只看该作者
有这么好玩的事儿也不喊上我。

1. VBELN和POSNR是VBAP的key
2. For all entries in的drive table也就是T_VBAP里只要这俩列就够了,其他多余
3. Where里,也只比较这两列即可。
4. MSEG里没有对这两列做索引,可以考虑增加一个索引

使用道具 举报

回复
论坛徽章:
5
生肖徽章2007版:鼠
日期:2009-03-10 21:26:282009日食纪念
日期:2009-07-22 09:30:00参与WIN7挑战赛纪念
日期:2009-11-09 11:50:092010新春纪念徽章
日期:2010-01-04 08:33:08ITPUB9周年纪念徽章
日期:2010-10-08 09:31:21
22#
发表于 2009-6-24 11:43 | 只看该作者
请教多表为什么不建议用Join?

使用道具 举报

回复
论坛徽章:
11
2009新春纪念徽章
日期:2009-01-04 14:52:28ITPUB元老
日期:2009-04-11 21:27:42生肖徽章2007版:牛
日期:2009-06-08 00:31:34
23#
发表于 2009-6-24 13:23 | 只看该作者
原帖由 hahappyppy 于 2009-6-24 11:43 发表
请教多表为什么不建议用Join?


具体情况具体分析,无一定之规。

使用道具 举报

回复
论坛徽章:
0
24#
 楼主| 发表于 2009-6-24 13:50 | 只看该作者
原帖由 awarecan 于 2009-6-24 11:36 发表
有这么好玩的事儿也不喊上我。

1. VBELN和POSNR是VBAP的key
2. For all entries in的drive table也就是T_VBAP里只要这俩列就够了,其他多余
3. Where里,也只比较这两列即可。
4. MSEG里没有对这两列做索引,可以考虑增加一个索引


多谢awarecan!

1. for all entries in不能只用vblen,posnr。因为销售订单行物料,工厂,库存地点可以与入库时物料,工厂,库存地点不一致。这个看表MSKA的key就知道了。
   我们系统这种情况比较多。简而言之,入库入错了。所以我加上了MATNR,WERKS,LGORT。

2. MSEG加索引是个好点子。我也对MAT_KDAUF,MAT_KDPOS做了索引。ZMSEG结构同MSEG,我对这两字段做了索引。
  
   问题是,ZMSEG比MSEG少那么多条数据,为什么取值一点都不快呢???

使用道具 举报

回复
论坛徽章:
11
2009新春纪念徽章
日期:2009-01-04 14:52:28ITPUB元老
日期:2009-04-11 21:27:42生肖徽章2007版:牛
日期:2009-06-08 00:31:34
25#
发表于 2009-6-24 14:18 | 只看该作者
MSEG里有一个M的索引

MANDT
MATNR
WERKS
LGORT
BWART
SOBKZ

你的查询条件部分匹配了这个索引,我猜因此对两个表查询效率相差不大。

使用道具 举报

回复
论坛徽章:
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
26#
发表于 2009-6-24 14:21 | 只看该作者
原帖由 binary_1985 于 2009-6-23 16:34 发表


很感谢LS的代码。

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

这样从语句上会取出我多余的数据,毕竟有的销售订单行我是不要取入库物料凭证的。
<<有物料号、工厂的限制应该不会取太多的多余的数据
还有一个问题,RANGES 定义的内表,如果超过1000行,数据会溢出的...

<<ranges的语法我测试过20000笔的数据也没有问题,你可以测试一下最大的行数

使用道具 举报

回复
论坛徽章:
8
授权会员
日期:2008-02-29 14:46:02生肖徽章2007版:猪
日期:2008-03-13 16:46:59奥运会纪念徽章:沙滩排球
日期:2008-08-28 17:37:39生肖徽章2007版:龙
日期:2009-04-16 20:53:16生肖徽章2007版:鼠
日期:2009-05-25 14:45:552011新春纪念徽章
日期:2011-02-18 11:42:472010广州亚运会纪念徽章:马术
日期:2011-03-30 09:25:572013年新春福章
日期:2013-02-25 14:51:24
27#
发表于 2009-6-24 16:56 | 只看该作者
ranges 语法 在select当中数据在1000以上(不同的数据库有可能范围不同)会dump的
警记这点,不然不是你倒霉就是你的后人倒霉。

使用道具 举报

回复
论坛徽章:
8
授权会员
日期:2008-02-29 14:46:02生肖徽章2007版:猪
日期:2008-03-13 16:46:59奥运会纪念徽章:沙滩排球
日期:2008-08-28 17:37:39生肖徽章2007版:龙
日期:2009-04-16 20:53:16生肖徽章2007版:鼠
日期:2009-05-25 14:45:552011新春纪念徽章
日期:2011-02-18 11:42:472010广州亚运会纪念徽章:马术
日期:2011-03-30 09:25:572013年新春福章
日期:2013-02-25 14:51:24
28#
发表于 2009-6-24 17:03 | 只看该作者
还有可以一步可以从vbfa中取数据
SELECT VBELN
    INTO TABLE IT_VBELN
   FROM VBFA
WHERE VBELV = 销售单号
and posnv = 销售行
and vbtyp_n = 'R'
不过 vbfa 也是很慢的,数据量也不会小

使用道具 举报

回复
论坛徽章:
2
ITPUB9周年纪念徽章
日期:2010-10-08 09:31:212011新春纪念徽章
日期:2011-02-18 11:43:34
29#
发表于 2009-6-25 17:44 | 只看该作者
mark

使用道具 举报

回复
论坛徽章:
4
2010新春纪念徽章
日期:2010-01-04 08:33:082010新春纪念徽章
日期:2010-03-01 11:19:07参与SAP云计算之旅活动纪念
日期:2011-05-17 13:35:45ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
30#
发表于 2010-6-1 19:33 | 只看该作者
原帖由 hahappyppy 于 2009-6-23 08:29 发表
两点意见哦:
1.尽量多加筛选条件, 而且条件最好是索引
2.基于性能考虑 a.把能join的就不多写一个Select
                      b.把能join的就不用 FOR ALL ENTRIES IN
   所以把 VBAP 和MSEG的两次Select写成Join, 这样性能会有具体提升
你自己可以用SE30去看看执行效果



如果确实不能加筛选条件了怎么办
    SELECT b~matnr
          b~meins
          b~ebeln
          b~bwart
          sum( b~menge ) as menge
          sum( b~dmbtr ) as dmbtr
     INTO corresponding fields of table g_t_mkpfg
     from mkpf as a inner join mseg as b on a~mblnr = b~mblnr and a~mjahr = b~mjahr
     where a~budat in s_budat and
           b~matnr in s_matnr and
           b~lgort in s_lgort and
           a~MJAHR = s_budat-low(4)
     group by b~matnr
              b~meins
              b~ebeln
              b~bwart.
这样怎么优化?很慢



[ 本帖最后由 julymusic 于 2010-6-1 20:05 编辑 ]

使用道具 举报

回复

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

本版积分规则 发表回复

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