Les bases de données optimisent généralement les requêtes avant de les exécuter. Pour une requête émise en utilisant JDBC ou un client en ligne de commande, il est possible de voir la requête optimisée réelle qui a été exécutée par la base de données. J'utilise Oracle Database.Comment afficher la requête SQL optimisée réelle dans une base de données
0
A
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é.
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
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? –
"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