Bonjour,
Mon probleme concerne l'optimalité d'une de mes requêtes sur Postgresql 8.2 :
J'ai une table dans laquelle il y a 2 colonnes A et B.
J'aimerais, pour un ensemble de A, avoir le B si il vaut une valeur donné, ou rien si il n'y a pas.
La requête de base serait :
Mais ça me semble bien compliqué : je doute qu'une recherche sur 3 tables (3 select) pour cette requête soit optimal, surtout si cette table est grande. Avez-vous d'autres propositions ou est-ce la meilleure?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 (SELECT A, B FROM table WHERE A IN(1,2,3) AND B = '2007-05-05') UNION (SELECT A, NULL FROM table WHERE A IN(1,2,3) AND NOT EXISTS(SELECT * FROM table WHERE A IN(1,2,3)AND B='2007-05-05')); Je devrais par exemple avoir : --------------- A | B --------------- 1 | 2007-05-05 2 | 3 | ---------------
Autre chose : J'ai vu dans un post qu'il fallait éviter les OR et utiliser les IN. Pourquoi les performances sont-elles meilleures? Ca vaut le coup de faire la négation avec des NAND quand on a que des OR?
3eme question : Je pense avoir besoin d'une requête du style "A=1 AND B='2005-05-05' OR A=4 AND B='2007-07-07' OR .... une 50e de fois ...". Quelle serait la bonne demarche à faire?
ps : je post dans le forum postgresql pour des optimisations eventuelles liée à postgres
Partager