2010-12-10 32 views

Répondre

1

Je pense que vous comprenez mal - la EXPLAIN PLAN vous montre un résumé de ce que l'optimiseur voit, pas une requête defacto:

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) 

Quelles décisions l'optimiseur, sont basées sur des statistiques sur les tables impliquées et les index . Les statistiques rafraîchissantes peuvent changer radicalement si les choses ont suffisamment changé.

+1

Pour être absolument précis - Les SGBD réécrivent souvent les requêtes (en supprimant les parties obsolètes, comme «WHERE TRUE» ou «WHERE a = 1 AND TRUE», etc.). Mais en effet, je pense aussi que OP ne comprend que le 'EXPLAIN'. – zerkms

+0

Que faire si je demande une jointure dans une requête de sélection mais qu'aucune colonne de la table jointe n'est demandée et que la clause where contient les colonnes de la colonne de jointure uniquement dans le but d'effectuer une jointure rendant la jointure inutile. La jointure serait-elle encore effectuée? –

+1

"but d'effectuer une jointure rendant inutile la jointure" - pourquoi le pensez-vous? Même si vous ne sélectionnez aucun champ de la table jointe, la clause INNER JOIN peut modifier le jeu de résultats. Ce n'est pas l'affaire des SGBD - penser à vous: si vous n'avez pas besoin d'une jointure, supprimez-la vous-même. – zerkms