2010-12-10 3 views

Antwort

1

Ich glaube, Sie mißverstehen - die EXPLAIN PLAN zeigt Ihnen eine Zusammenfassung dessen, was das Optimierungsprogramm sieht, nicht eine De-facto-Abfrage:

Rows  Execution Plan 
-------- ---------------------------------------------------- 
     12 SORT AGGREGATE 
     2 SORT GROUP BY 
    76563 NESTED LOOPS 
    76575  NESTED LOOPS 
     19  TABLE ACCESS FULL CN_PAYRUNS_ALL 
    76570  TABLE ACCESS BY INDEX ROWID CN_POSTING_DETAILS_ALL 
    76570  INDEX RANGE SCAN (object id 178321) 
    76563  TABLE ACCESS BY INDEX ROWID CN_PAYMENT_WORKSHEETS_ALL 
11432983  INDEX RANGE SCAN (object id 186024) 

Welche Entscheidungen der Optimierer macht, basieren auf Statistiken über die beteiligten Tabellen und alle Indizes . Aktualisieren Statistiken können dramatisch ändern, wenn sich die Dinge genug geändert haben.

+1

Um absolut präzise zu sein - DBMS schreibt oft Abfragen neu (durch Entfernen veralteter Teile, wie 'WO WAHR 'ODER' WO a = 1 UND WAHR' usw.). Aber ich denke auch, dass OP die EXPLAIN einfach falsch versteht. – zerkms

+0

Was ist, wenn ich eine Join in einer Select-Abfrage anfordert, aber keine der Spalten der Joined-Tabelle angefordert wird und die Where-Klausel die Spalten der Join-Spalte nur für den Zweck einer Join-Verbindung enthält, die den Join unnötig macht. Wird der Join noch ausgeführt? –

+1

"Zweck der Durchführung einer Join effektiv machen die Join unnötig" - warum denkst du so? Auch wenn Sie keine Felder aus der Join-Tabelle auswählen, kann die INNER JOIN-Klausel die Ergebnismenge ändern. Es ist nicht das DBMS-Geschäft - für Sie zu denken: Wenn Sie keinen Beitritt benötigen, entfernen Sie ihn einfach selbst. – zerkms

Verwandte Themen