I've got these results from an EXPLAIN on SQL on Oracle:
This looks to me like rather a bad access path. It certainly takes a long time.
If I pull out the AEDAT and UPDDT field out, I get this:
Which looks a lot better. Trouble is I can't find anything I can understand on the various oracle sites, what the Rows column mean. So I'm not sure my analysis is correct.
Code:
SELECT
"BUKRS", "BELNR", "GJAHR"
FROM
"BKPF"
WHERE
"MANDT" = :A0 AND ( "CPUDT" > :A1 AND "CPUDT" < :A2 OR "CPUDT" = :A3 AND "CPUTM" >= :A4 OR
"CPUDT" = :A5 AND "CPUTM" <= :A6 OR "AEDAT" >= :A7 AND "AEDAT" <= :A8 OR UPDDT >= :A9 AND "UPDDT" <= :A10 ) AND "AWTYP" = :A11
Execution Plan
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2223K| 137M| 391K (2)|
|* 1 | TABLE ACCESS BY INDEX ROWID| BKPF | 2223K| 137M| 391K (2)|
|* 2 | INDEX RANGE SCAN | BKPF~4 | 2223K| | 5181 (4)|
---------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("UPDDT">=:A9 AND "UPDDT"<=:A10 OR "CPUDT">:A1 AND
"CPUDT"<:A2 OR "AEDAT">=:A7 AND "AEDAT"<=:A8 OR "CPUDT"=:A3 AND
"CPUTM">=:A4 OR "CPUDT"=:A5 AND "CPUTM"<=:A6)
2 - access("MANDT"=:A0 AND "AWTYP"=:A11)
)
If I pull out the AEDAT and UPDDT field out, I get this:
Code:
SELECT
"BUKRS", "BELNR", "GJAHR"
FROM
"BKPF"
WHERE
"MANDT" = :A0 AND ( "CPUDT" > :A1 AND "CPUDT" < :A2 OR "CPUDT" = :A3 AND "CPUTM" >= :A4 OR
"CPUDT" = :A5 AND "CPUTM" <= :A6 ) AND "AWTYP" = :A11
Execution Plan
----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 5647 | 259K| 81617 (10)|
| 1 | CONCATENATION | | | | |
|* 2 | TABLE ACCESS BY INDEX ROWID| BKPF | 44 | 2068 | 3700 (57)|
|* 3 | INDEX SKIP SCAN | BKPF~5 | 14808 | | 3083 (68)|
|* 4 | TABLE ACCESS BY INDEX ROWID| BKPF | 44 | 2068 | 3700 (57)|
|* 5 | INDEX SKIP SCAN | BKPF~5 | 14808 | | 3083 (68)|
|* 6 | TABLE ACCESS BY INDEX ROWID| BKPF | 5559 | 255K| 74217 (5)|
|* 7 | INDEX RANGE SCAN | BKPF~5 | 170K| | 67134 (5)|
----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter("CPUTM"<=:A6 AND "AWTYP"=:A11)
3 - access("MANDT"=:A0 AND "CPUDT"=:A5)
filter("CPUDT"=:A5)
4 - filter("CPUTM">=:A4 AND "AWTYP"=:A11 AND (LNNVL("CPUDT"=:A5) OR
LNNVL("CPUTM"<=:A6)))
5 - access("MANDT"=:A0 AND "CPUDT"=:A3)
filter("CPUDT"=:A3)
6 - filter("AWTYP"=:A11 AND (LNNVL("CPUDT"=:A5) OR
LNNVL("CPUTM"<=:A6)) AND (LNNVL("CPUDT"=:A3) OR LNNVL("CPUTM">=:A4)))
7 - access("MANDT"=:A0 AND "CPUDT">:A1 AND "CPUDT"<:A2)
filter("CPUDT">:A1 AND "CPUDT"<:A2)

Comment