Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/08/2007, 15h35   #1
Candidat au titre de Membre du Club
 
Inscription : novembre 2006
Messages : 72
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 72
Points : 11
Points : 11
Par défaut Optimalité d'une requete

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 :
Code :
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 |
---------------
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?

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
ledjlale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2007, 16h42   #2
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 122
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 122
Points : 28
Points : 28
pour ta 3ème question, tu peux essayer de faire des couples du genre (A,B) in ((1,'2005-05-05'),....)
zekabyle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 09h19   #3
Candidat au titre de Membre du Club
 
Inscription : novembre 2006
Messages : 72
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 72
Points : 11
Points : 11
Merci, je ne connaissais pas le coup des couples
ledjlale est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h56.


 
 
 
 
Partenaires

Hébergement Web