Was die DEBUG-Nachrichten angeht, so bin ich auch inzwischen soweit, dass ich diesen nicht mehr ganz traue.
Auch wenn ich die vorgeschlagenen Zugriffspfade angelegt habe, werden diese manchmal nicht verwendet !

Dafür sind meine Erfahrungen mit den WITH-Konstrukten sehr gut.
Manchmal werden diese temporären Ergebnisse als Join aufgelöst (insbesonders wenn Zugriffspfade verwendet werden können und auch werden), häufig aber tatsächlich eine temporäre Table (*QUERYnnnnn) erstellt.

Der Vorteil liegt meistens in dem Konstrukt
"where field [not] in (select ...)"

Hier ist das Problem, dass ich nur 1 Spalte im Ergebnis haben darf ich aber (Mandantenfähigkeit) eigentlich eine Kombination benötige. Bei einem WITH-Konstrukt war der Zugriff dann um Faktor 10.000 schneller !

Beispiel:
Code:
with
xTmp1 as (select f1, f2, f3, f4 concat f5 as fx
from table1 where ...)
,
xTmp2 as (select h4 concat h5 as hx
from table2 where ...)

select * 
from xTmp1 where fx in (select hx from xTmp2)
Es wurden tatsächlich 2 temporäre Tabellen erstellt (*QUERY0001, *QUERY0002) und die Auswertung lief superschnell.