对于,MKPF/MSEG EKKO/EPKO VBAK/VBAP LIKP/LIPS VTTK/VTTP
以上几组数据库表,在使用INNER JOIN的时候,是不是都容易忽略MANDT这个字段,这样会造成很大的浪费,查询时非常耗时,总感觉使用主键关联应该会快,其实没有关联全,系统解析时不会完整的使用0号索引。
对比以下两段代码:
TYPES : BEGIN OF ty_type,
mblnr TYPE mblnr,
mjahr TYPE mjahr,
zeile TYPE mblpo,
END OF ty_type.
DATA gt_mseg TYPE STANDARD TABLE OF ty_type
WITH HEADER LINE.
SELECT mseg~mblnr
mseg~mjahr
mseg~zeile
FROM mkpf INNER JOIN mseg ON mkpf~mblnr = mseg~mblnr
AND mkpf~mjahr = mseg~mjahr
CLIENT specified
INTO TABLE gt_mseg
WHERE mkpf~budat BETWEEN '20110101' and '20110103'
AND mkpf~mandt = '400'.
WRITE sy-subrc.
******************************************************************
TYPES : BEGIN OF ty_type,
mblnr TYPE mblnr,
mjahr TYPE mjahr,
zeile TYPE mblpo,
END OF ty_type.
DATA gt_mseg TYPE STANDARD TABLE OF ty_type
WITH HEADER LINE.
SELECT mseg~mblnr
mseg~mjahr
mseg~zeile
FROM mkpf INNER JOIN mseg ON mkpf~MANDT = mseg~MANDT
AND mkpf~mblnr = mseg~mblnr
AND mkpf~mjahr = mseg~mjahr
CLIENT specified
INTO TABLE gt_mseg
WHERE mkpf~budat BETWEEN '20110101' and '20110103'
AND mkpf~mandt = '400'.