1

我正在尝试连接两个表并将数据放入covp_itab内部表中,但这需要很长时间。此外,我试图从COVP为两个表定义的数据库视图中获取数据,它也花了很长时间。

SELECT bk~kokrs
       bk~belnr
       bk~budat
       bk~cpudt
       bk~bltxt
       ep~buzei
       ep~wkgbtr
       ep~objnr
       ep~gjahr
       ep~kstar
       ep~vrgng
       ep~parob1
       ep~beknz
       ep~sgtxt
       ep~objnr_n1
       ep~bukrs
INTO TABLE covp_itab
FROM cobk AS bk
INNER JOIN coep AS ep ON (bk~kokrs = ep~kokrs AND bk~belnr = ep~belnr)
WHERE bk~kokrs     = co_kokrs
AND   ep~wrttp     = '04'
AND   ep~kstar     IN s_kstar
AND   ep~vrgng     IN s_vrgng 
AND   ep~bukrs     IN r_bukrs
AND   bk~timestamp IN r_stamp.

这里可能是什么问题?

4

1 回答 1

1

正如 Jagger 所提到的,您没有使用任何可以利用这些表中的任何一个标准索引的标准。我会做一些事情:

  • 使用 SE11 调查可用于 COEP 的索引,并查看您是否无法制定将使用这些索引之一的选择(带有附加标准)。按顺序为字段提供数据很重要——即,对于索引 COEP~2,字段是 MANDT/OBJNR/KSTAR/GJAHR/PERIO/PAROB1。如果您无法提供 OBJNR 但有 KSTAR、GJAHR 等,它不会使用索引,因为您没有 OBJNR。但是,如果您只有 MANDT 和 OBJNR,它可能会使用此索引。
  • 将 bk~kokrs 更改为 ep~kokrs 并将您的选择更改为从 COEP 读取,然后加入 COBK。
  • 对于您拥有(现在)5 个标准的 COEP 记录,转到 SE16,输入这些选择并运行它以查看需要多长时间。请注意,查询可能会被缓存并且后续运行可能会更快,因此请尽可能尝试使用不同的值。
  • 如有必要,在 COEP 上创建一个附加索引。这些都是以插入和更新为代价的,因此请注意,只要您有一个缓慢的 select 语句就创建一个索引并不是一个好主意。
  • 如果您创建了索引但没有改善情况,您可以通过使用事务 ST05 运行 SQL 跟踪来找出正在使用的索引(如果有的话)。
于 2016-01-23T17:50:12.470 回答