PDA

View Full Version : sql performance einzelsatz / group by



Robi
25-09-14, 13:54
Hallo *all
Hier gab es folgendes Statement:


with a as (select key1, key2, key3, dajj, damm, datt,
stor from FILE1 where rgma = 140850022
and (bank = 9 and stgr not in(0, 1, 91)
or bank <> 9) and stat = 9
and zahl < 0 and kzze = 1
)
select sum(zahl), count(*)
from file1 where
(key1, key2, key3, dajj, damm, datt, sanr) in
(select key1, key2, key3, dajj, damm, datt, stor
from a)
and kzze = 1

das läuft auf 25 Mio Datensätze 3-5 Sekunden

mache ich aus dem

with a as (select key1, key2, key3, dajj, damm, datt,
stor from FILE1 where rgma = 140850022
and (bank = 9 and stgr not in(0, 1, 91)
or bank <> 9) and stat = 9
and zahl < 0 and kzze = 1
)
select key1, key2, key3, zahl
from file1 where
(key1, key2, key3, dajj, damm, datt, sanr) in
(select key1, key2, key3, dajj, damm, datt, stor
from a)
and kzze = 1

läuft das ding > 45 minuten

muß er für SUM(Zahl), nicht auch alle passenden lesen?
LF mit key1, 2, 3 gibt es
wieso lauft das so lange

Robi

BenderD
25-09-14, 14:30
... weil es einen anderen Zugriffsplan berechnet (ich würde da nach Altvätersitte das unter debug laufen lassen und mir die diagnostics ansehen). Alternativ könnte man auch die Join Variante ausprobieren, da ist weniger Raum für exotische Einfälle des Query Pessimizers.

D*B