Hallo zusammen,
ich habe in den letzten Tagen versucht, ein paar SQL-Statements ein bisschen flotter zu machen und habe mit folgendem Tipp irgendwie unglaubwürde Erfolge erzielt, die ich noch nicht ganz verstehe.
(Umgebung ist DB2 V8)
Ein Statement der Art:
select \* from tab1
join tab2 on tab1.key = tab2.key
where tab2.attr = 1;
wurde zu
select \* from tab1
join (select \* from tab2 where coalesce(attr, 0) = 1) tab2 on
tab1.key = tab2.key;
Wenn ich mich jetzt nicht vertippt habe, sollten diese Statements die selbe Ergebnismenge beschreiben, dummerweise ist das zweite spürbar schneller - ein Explain ergab einen Vorteil von ~28% (allerdings im deutlich umfangreicheren Original-Statement, dass ich jetzt vielleicht um wichtige Details reduziert habe…?).
Hab ich mich irgendwo verguckt?
Kann es was mit der Selektivität des Schlüssels oder des Kennzeichens zu tun haben?
Ist coalesce(…) für den Optimizer toller?
Ist es einfach nur Zufall und Einbildung?
Ich bin wirklich neugierig!
Über jede Antwort freue ich mich, danke im Voraus,
Till