Eindeutige verursachende Zeit

Leute,

Was ist der andere beste Ansatz von der Entwicklerseite, um die Zeit zu verkürzen?

#1.

Ausführungszeit = 08 Sekunden

select COUNT(A.CORRESP_NO) —COUNT(DISTINCT A.CORRESP_NO)
von CORIC IC
innerer Join CORCUS A ON (A.CORSNO = IC.CORSSNO)
innerer Join OTHTAB ot
auf a.CORCUSLAN =ot.OTHK98

#2.

Ausführungszeit = 53 Sekunden

wähle COUNT(DISTINCT A.CORRESP_NO)
von CORIC IC
innerer Join CORCUS A ON (A.CORSNO = IC.CORSSNO)
innerer Join OTHTAB ot
auf a.CORCUSLAN =ot.OTHK98

Bitte die SQL’s nicht eindeutschen, dafür aber Tabellendefinition und EXPLAIN ANALYSE liefern

1 „Gefällt mir“

ich vermute, der Optimizer tappt im 2. Statement in die Falle mit der “driving table”, die nicht das Object enthält, das gezählt wird.
Es riecht so, als ob der Optimizer die falsche Reihenfolge wählt, erst macht er einen vermutlich riesigen Join, im Ergebnis davon zählt er die einzigartigen Vorkommen von A.CORRESP_NO.
Man muss das Statement so umstellen, dass das Zwischenergebnis direkt so klein wie möglich ist. Da es im Beitrag kein Explain gibt bzw. keine Mengengerüste genannt wurden, kann man nicht konkret antworten.
Da die erste Abfrage viel schneller ist, ist die Lösung jedenfalls nicht zwangsläufig, einen zusätzlichen Index anzulegen.