Lorsque nous joignons plus de 2 tables, oracle ou d'ailleurs toute base de données décide de joindre 2 tables et d'utiliser le résultat pour rejoindre les tables suivantes. Existe-t-il un moyen d'identifier la taille de jointure intermédiaire. Je suis particulièrement intéressé par Oracle. Une solution que je connais est d'utiliser Autotrace dans sqldeveloper qui a la colonne LAST_OUTPUT_ROWS. Mais pour les requêtes exécutées par pl/sql et d'autres moyens, oracle enregistre-t-il la taille de la jointure intermédiaire dans une table? Je demande cela parce que récemment nous avons eu un problème car quelqu'un a laissé tomber les statistiques et n'a pas réussi à le régénérer et quand nous avons découvert que l'oracle a formé une table intermédiaire de 180 millions de lignes avant d'arriver au résultat final de 6 lignes et la requête était assez lente.Taille de table de jointure intermédiaire Oracle
3
A
Répondre
2
Oracle peut matérialiser les résultats intermédiaires d'une jointure de table dans l'ensemble de segments temporaire de votre session.
Comme il s'agit d'une table unique supprimée une fois la requête terminée, ses statistiques ne sont pas stockées.
Cependant, vous pouvez estimer sa taille en construisant un plan pour la requête et regarder ROWS
paramètres de l'opération appropriée:
EXPLAIN PLAN FOR
WITH q AS
(
SELECT /*+ MATERIALIZE */
e1.value AS val1, e2.value AS val2
FROM t_even e1, t_even e2
)
SELECT COUNT(*)
FROM q
SELECT *
FROM TABLE(DBMS_XPLAN.display())
Plan hash value: 3705384459
---------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 43G (5)|999:59:59 |
| 1 | TEMP TABLE TRANSFORMATION | | | | | |
| 2 | LOAD AS SELECT | | | | | |
| 3 | MERGE JOIN CARTESIAN | | 100T| 909T| 42G (3)|999:59:59 |
| 4 | TABLE ACCESS FULL | T_ODD | 10M| 47M| 4206 (3)| 00:00:51 |
| 5 | BUFFER SORT | | 10M| 47M| 42G (3)|999:59:59 |
| 6 | TABLE ACCESS FULL | T_ODD | 10M| 47M| 4204 (3)| 00:00:51 |
| 7 | SORT AGGREGATE | | 1 | | | |
| 8 | VIEW | | 100T| | 1729M (62)|999:59:59 |
| 9 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6604_2660595 | 100T| 909T| 1729M (62)|999:59:59 |
---------------------------------------------------------------------------------------------------------
Ici, la table matérialisée est appelée SYS_TEMP_0FD9D6604_2660595
et le nombre d'enregistrements est estimé 100T
(100,000,000,000,000
enregistrements)
Questions connexes
- 1. Jointure SQL pour saisir les données de la même table via la table intermédiaire
- 2. Oracle requête de jointure
- 3. NHibernate Mapping table intermédiaire
- 4. Taille réelle de l'espace de table dans Oracle
- 5. jointure de table où
- 6. Jointure externe dans la syntaxe de jointure Oracle classique
- 7. Oracle gauche jointure externe
- 8. Rails table de jointure problème
- 9. Modélisation d'une table de jointure
- 10. PHP MySQL table de jointure
- 11. oracle -left requête de jointure externe ANSI
- 12. Oracle gauche requête de jointure externe
- 13. Évitez les résultats de jointure de requête intermédiaire énorme (1.33615E + 35 lignes)
- 14. Problème de jointure de table Mysql simple
- 15. Mappage de table de jointure NHibernate fluide
- 16. Ordre de jointure de table dans postgres
- 17. SQLAlchemy ForeignKey relation via une table intermédiaire
- 18. NHibernate cartographie avec une table intermédiaire
- 19. Hibernate self-table avec le mappage de table de jointure
- 20. [Mysql]: Insertion de valeurs dans une table intermédiaire
- 21. Utilisation de données supplémentaires sur une table intermédiaire avec NHibernate
- 22. comment augmenter la taille d'une table dans Oracle?
- 23. Ruby on Rails table de jointure relation
- 24. Ruby on Rails table de jointure Associations
- 25. Ordonné Core Data table de jointure Efficiencies
- 26. La jointure de table est si lente!
- 27. Rails table de jointure rend mauvaise sql
- 28. Doctrine 2 table de jointure + champs supplémentaires
- 29. Hibernate insérant dans la table de jointure
- 30. Comment faire correctement une table de jointure manytomany dans JPA?