Bonjour,
Je souhaiterai faire une requête en SQL qui pourrait effectuer un gros traitement en une seule fois, mais je ne sais pas comment c'est faisable.
J'en appelle à vous pour me guider, car je débute seulement en Oracle.
Imaginons que la base que je souhaite remplir est composée de 2 tables :
- table_noms (nom_id [INTEGER auto increment], nom [VARCHAR]) qui contient une liste de noms de personnes
et
- table_telephones (tel_id [INTEGER auto increment], tel_number [VARCHAR], nom_id [INTEGER]) qui contient une liste de numéros de téléphones.
J'ai une clé étrangère sur le champ "nom_id" : un numéro de téléphone est forcement lié à un nom de personne.
Je code un ETL en PHP qui me permet de remplir cette base de données.
J'ai réussi à créer et remplir une table temporaire, qui contient toutes mes infos :
temp_nom_tel (nom [VARCHAR], telephone [VARCHAR]).
Je souhaiterai pouvoir faire de manière la plus optimisée mon chargement de tables.
La première chose que j'ai faite, c'est un script PHP qui fait :
Je fais donc pour chaque ligne 2 requêtes SQL.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 pour chaque ligne je j'ai dans "temp_nom_tel" { - je fais un INSERT dans "table_nom" du nom - je récupère le "nom_id" qui a été créé - je fais un INSERT dans "table_telephones" du telephone et de l'id que j'ai récupéré à l'instant }
Le problème, c'est que quand j'ai 200'000 lignes, ça prend des plombes !!!
Existe-t-il une façon de faire ce traitement avec un minimum de requêtes ?
(quelle est la façon la plus optimisée de faire ce traitement ?)
Je code en PHP en faisant des requêtes PDO, donc je ne sais pas si je peux exécuter des blocs de PL/SQL (sans parler du fait que je ne sais pas faire de scripts PL/SQL).
Mon modèle est en réalité beaucoup plus compliqué que ce que j'ai présenté, c'est pour ça que je ne peux pas tout simplement changer mon modèle![]()
Partager