Bonjour,
J'ai besoin de votre avis sur l'exécution d'un traitement SQL sur une base PostgreSQL 9.1 (cependant mon problème n'est pas vraiment en relation avec Postgres, il est plus général). Avant d'ajouter une donnée en base il faut vérifier si elle n'existe pas déjà. Jusque là rien de méchant mais ça se complique un peu... La table peut contenir plusieurs centaines de milliers d'enregistrements voir quelques millions.
La clause WHERE du SELECT qui vérifie l'existence d'une donnée en base porte sur 10 ou 11 colonnes sur deux tables.
Actuellement ce qui a été développé c'est:
- Si le SELECT ne ramène aucun résultat :
- le traitement effectue un INSERT pour mettre à jour la base de données
- Sinon
- Ajout d'une erreur au bilan de traitement du batch
La requête est très simple, elle intervient sur deux table via une jointure :
- maTable peut contenir des centaines de milliers d'enregistrement, voir quelques millions
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT * FROM maTable T1 JOIN maTable2 T2 ON ... WHERE T1.attr1 = 'XXX' and T1.attr2 = 'YYY' and T1.attr3 = 'ZZZ' and ... and T2.attr11 = 'TOTO'
- maTable2 elle ne contient qu'une vingtaine d'enregistrement
Seulement j'ai des doutes sur l'efficacité de ce type de traitement... Il parait une mauvaise idée de mettre un indexe sur 10 champ ? Ne peut-on pas faire autrement ?
Merci d'avance,
Romain.
Partager