Bonjour à vous tous,
Je vous écris car je débute actuellement sous une base de données Oracle. Je n'ai pas beaucoup d'expérience et j'aurais besoin de vos conseils.
Ceci est la toute première fois que j'écris un message pour demander de l'aide sur ce forum que je connais depuis peu, alors j'espère ne pas avoir fait d'erreur qui pourrait vous énerver.
Je travaille sous une base de données Oracle 10g et j'essaye d'accéler une procédure PL/SQL dans laquelle 3 requêtes SQL sont particulièrement gourmandes en terme de temps.
Concrètement, je crée une table temporaire tabA qui sera par la suite insérée dans deux autres tables tabB(totalement) et tabC(partiellement).
(1) Création de tabA : elle fait autour de 10 millions de lignes il me semble (après avoir été remplie) et ne possède ni index, ni partition. Il y a en revanche des conditions sur certaines colonnes pour que la valeur contenue soit non NULL
(2) Insertion de toutes les lignes de tabA dans tabB sans exception
(3) Insertion des lignes de tabA dans tabC selon une condition (WHERE) portant sur la valeur numérique d'un champ : la table tabA dispose de plusieurs champs dont un dénommé DOCUMENT_TYPE pouvant valoir 4 ou 6. Si la valeur est 4 la ligne est insérée dans tabB; sinon non.
Les tables tabB et tabC sont des tables déjà partitionnées sur d'autres champs et je n'ai pas le droit de modifier cette structure. Ces deux tables possèdent plusieurs clés secondaires et plusieurs indexs.
J'ai lu quelques posts et quelques articles. J'ai essayé d'utiliser un index B-Tree sur le champ DOCUMENT_TYPE mais je n'ai noté aucune accélération notable. J'en ai profité pour tester certaines méthodes pour insérer dans deux tables à la fois en une requête mais je n'ai pas eu de meilleurs temps d'exécution; la durée a d'ailleurs dans certains cas augmentée.
Avez-vous des pistes à me proposer pour pouvoir accélerer la durée totale d'exécution de ces 3 requêtes.
Merci d'avance de vos réponses.
Partager