Performance cobk和coep表上的内部联接占用大量时间
我试图连接两个表并将数据放入Performance cobk和coep表上的内部联接占用大量时间,performance,abap,opensql,Performance,Abap,Opensql,我试图连接两个表并将数据放入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~vrg
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.
这里可能有什么问题?正如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跟踪来找出正在使用哪些索引(如果有的话)