Micha1701
Cadet 4th Year
- Registriert
- März 2007
- Beiträge
- 113
Hallo zusammen,
hab mal was für die richtigen Experten unter uns.
Hier ein Monster SQL welches im SAP System unter Oracle laufen soll.
Die Laufzeit liegt jenseits von 30 Stunden. Wäre schön, wenn man das auf unter 8 Stunden kriegen würde.
Hier mal die Größen der Tabellen:
DIMAIOBPAR - 16.639.094 Zeilen (relevant 10.538.624)
FKKVK - 8.786.755 Zeilen (relevant min. 6.155.081)
FKKVP - 8.786.755 Zeilen (relevant wahrscheinlich 6.155.081)
DFKKLOCKS - 816.131 Zeilen (relevant 2.461)
DIMAPARPLAN - 10.934.171 Zeilen (unbekannte relevants wahrscheinlich ~8.000.000)
VVSCPOS - 66.009.792 zeilen (relevant max. 42.217.773)
Könnt Ihr nochwas gebrauchen? Ich könnt noch ein EXPLAIN mitgeben...
hab mal was für die richtigen Experten unter uns.
Hier ein Monster SQL welches im SAP System unter Oracle laufen soll.
Die Laufzeit liegt jenseits von 30 Stunden. Wäre schön, wenn man das auf unter 8 Stunden kriegen würde.
Code:
WITH
versobj_par_bez AS (SELECT insobject, partner, insobjecttyp, partneracc,
z_vstatus, z_vo_rd, z_gp_nr_vn, z_status_gm,
pkey, pp_from
FROM dimaiobpar
WHERE z_vstatus IN ('10', '11', '30') AND
insobjecttyp IN ( '11', '12', '13', '21',
'22', '23', '24', '25',
'40', '42', '43', '50',
'60', '75', '77', '78')),
vkont_distinct AS (SELECT partneracc AS vkont
FROM versobj_par_bez
GROUP BY partneracc),
vertragskonto AS (SELECT fkkvk.vkont, fkkvk.vkona, fkkvk.vktyp
FROM fkkvk, vkont_distinct
WHERE fkkvk.vkont = vkont_distinct.vkont AND
fkkvk.vktyp IN ('10', '27', '50', '60', '75', '80')),
vkont_par_distinct AS (SELECT partneracc as vkont, partner
FROM versobj_par_bez
GROUP BY partneracc, partner),
ezw AS (SELECT fkkvkp.vkont, fkkvkp.gpart, fkkvkp.ezawe
FROM fkkvkp, vkont_par_distinct
WHERE fkkvkp.vkont = vkont_par_distinct.vkont AND
fkkvkp.gpart = vkont_par_distinct.partner),
sperre AS (SELECT dfkklocks.gpart, dfkklocks.vkont, dfkklocks.lockr
FROM dfkklocks, vkont_par_distinct
WHERE lockr = 'M' AND
fdate <= '20130101' AND /*pa_stat*/
tdate >= '20130101' AND /*pa_stat*/
gpart = partner AND
dfkklocks.vkont = vkont_par_distinct.vkont),
zahlplan_alle AS (SELECT dimaparpplan.insobject, dimaparpplan.partner, dimaparpplan.pp_from, dimaparpplan.pp_from_time,
dimaparpplan.pkey
FROM dimaparpplan, versobj_par_bez
WHERE dimaparpplan.insobject = versobj_par_bez.insobject AND
dimaparpplan.partner = versobj_par_bez.partner),
zahlplan_datum_tab AS (SELECT insobject, partner, MAX(pp_from) AS pp_from
FROM zahlplan_alle
GROUP BY insobject, partner),
zahlplan_datum_uhrzeit_tab AS (SELECT zahlplan_alle.insobject, zahlplan_alle.partner, zahlplan_alle.pp_from,
MAX(zahlplan_alle.pp_from_time) as pp_from_time
FROM zahlplan_alle, zahlplan_datum_tab
WHERE zahlplan_alle.insobject = zahlplan_datum_tab.insobject AND
zahlplan_alle.partner = zahlplan_datum_tab.partner AND
zahlplan_alle.pp_from = zahlplan_datum_tab.pp_from
GROUP BY zahlplan_alle.insobject, zahlplan_alle.partner, zahlplan_alle.pp_from),
zahlplan_relevant AS (SELECT zahlplan_alle.insobject, zahlplan_alle.partner, zahlplan_alle.pp_from,
zahlplan_alle.pkey
FROM zahlplan_alle, zahlplan_datum_uhrzeit_tab
WHERE zahlplan_alle.insobject = zahlplan_datum_uhrzeit_tab.insobject AND
zahlplan_alle.partner = zahlplan_datum_uhrzeit_tab.partner AND
zahlplan_alle.pp_from = zahlplan_datum_uhrzeit_tab.pp_from AND
zahlplan_alle.pp_from_time = zahlplan_datum_uhrzeit_tab.pp_from_time),
zahlplanpos AS (SELECT 'X' AS zpp_vorhanden, gpart, vtref, prgrp, posnr, psngl, pmtfr, pmtto, pmend, zzendegrund,
amount_total, amount_inst, hvorg, tvorg, zzdokart, zztech_begin, ccode, zztimestamp
FROM vvscpos, versobj_par_bez
WHERE gpart = partner AND
vtref = insobject AND
hvorg = '1000' AND
(tvorg = '0100' OR tvorg = '0110') AND
blart = '10' AND
((pmtfr >= '20120101' AND pmtfr <= '20190101') OR /* PA_ZPVON, PA_ZPBIS */
(pmtto >= '20120101' AND pmtto <= '20190101') OR /* PA_ZPVON, PA_ZPBIS */
(pmend >= '20120101' AND pmend <= '20190101') OR /* PA_ZPVON, PA_ZPBIS */
(pmtfr <= '20120101' AND pmtto >= '20190101' AND /* PA_ZPVON, PA_ZPBIS */
(pmend = '00000000' OR pmend >= '20120101')))) /* fix, PA_ZPVON */
SELECT versobj_par_bez.insobject,
versobj_par_bez.partner,
versobj_par_bez.insobjecttyp,
versobj_par_bez.partneracc,
versobj_par_bez.z_vstatus,
versobj_par_bez.z_vo_rd,
versobj_par_bez.z_gp_nr_vn,
versobj_par_bez.z_status_gm,
versobj_par_bez.pkey,
versobj_par_bez.pp_from,
vertragskonto.vkona,
vertragskonto.vktyp,
ezw.ezawe,
sperre.lockr,
zahlplan_relevant.pp_from as zahlplan_pp_from,
zahlplan_relevant.pkey as zahlplan_pkey,
zahlplanpos.zpp_vorhanden,
zahlplanpos.prgrp,
zahlplanpos.posnr,
zahlplanpos.psngl,
zahlplanpos.pmtfr,
zahlplanpos.pmtto,
zahlplanpos.pmend,
zahlplanpos.zzendegrund,
zahlplanpos.amount_total,
zahlplanpos.amount_inst,
zahlplanpos.hvorg,
zahlplanpos.tvorg,
zahlplanpos.zzdokart,
zahlplanpos.zztech_begin,
zahlplanpos.ccode,
zahlplanpos.zztimestamp
FROM versobj_par_bez
JOIN vertragskonto
ON versobj_par_bez.partneracc = vertragskonto.vkont
LEFT OUTER JOIN ezw
ON versobj_par_bez.partneracc = ezw.vkont AND
versobj_par_bez.partner = ezw.gpart
LEFT OUTER JOIN sperre
ON versobj_par_bez.partneracc = sperre.vkont AND
versobj_par_bez.partner = sperre.gpart
LEFT OUTER JOIN zahlplan_relevant
ON versobj_par_bez.insobject = zahlplan_relevant.insobject AND
versobj_par_bez.partner = zahlplan_relevant.partner
LEFT OUTER JOIN zahlplanpos
ON versobj_par_bez.insobject = zahlplanpos.vtref AND
versobj_par_bez.partner = zahlplanpos.gpart
ORDER BY versobj_par_bez.insobject, versobj_par_bez.partner
Hier mal die Größen der Tabellen:
DIMAIOBPAR - 16.639.094 Zeilen (relevant 10.538.624)
FKKVK - 8.786.755 Zeilen (relevant min. 6.155.081)
FKKVP - 8.786.755 Zeilen (relevant wahrscheinlich 6.155.081)
DFKKLOCKS - 816.131 Zeilen (relevant 2.461)
DIMAPARPLAN - 10.934.171 Zeilen (unbekannte relevants wahrscheinlich ~8.000.000)
VVSCPOS - 66.009.792 zeilen (relevant max. 42.217.773)
Könnt Ihr nochwas gebrauchen? Ich könnt noch ein EXPLAIN mitgeben...