Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1921 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Optimisation requetes imbriquées

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Optimisation requetes imbriquées

n°1528961
_sentenza_
Houba Houba Hop !!!
Posté le 15-03-2007 à 15:53:01  profilanswer
 

Bonjour,
 
 :hello:  
 
J'ai un probleme d'optimisation sur une requete imbriquée.
 
Tout d'abord, ce que je veux ce sont les nouveaux adhérents, c'est à dire ceux qui n'etaient pas presents dans la table Cotis en 2005, ni en 2006, mais qui sont presents en 2007 et qui ont deja regle qq chose en 2007.
 
Voici ma requete :

Code :
  1. SELECT count(Cotis.num) as var FROM Cotis WHERE Cotis.num not in
  2. (SELECT Cotis.num from Cotis where Cotis.annee = " & Year(date) - 2 & " ) and Cotis.num not in
  3. (SELECT Cotis.num from Cotis where Cotis.annee = " & Year(date) - 1 & " ) and Cotis.num in
  4. (SELECT Cotis.num from Cotis where Cotis.annee = " & Year(date) & " and Cotis.[montant regle]>0)


 
Ca fait comme si la requete tournait en boucle, elle met du temps, et me sort bien le resultat au bout de 15 ou 20 minutes...
 [:mareek]  
 
Du coup, comment optimiser ça pour que ça soit plus rapide ?
(Ma table Cotis contient 70.000 enregistrements...)
 [:airforceone]  
 
Merci...


---------------
Le Saoumfa
mood
Publicité
Posté le 15-03-2007 à 15:53:01  profilanswer
 

n°1528971
ajnag
where no man has gone before
Posté le 15-03-2007 à 16:09:07  profilanswer
 

Code :
  1. SELECT count(Cotis.num) as var FROM Cotis
  2. WHERE Cotis.annee = " & Year(date) & "
  3. and Cotis.[montant regle]>0)


 
c'est pas plus simple comme ça ?


Message édité par ajnag le 15-03-2007 à 16:12:07
n°1528974
MagicBuzz
Posté le 15-03-2007 à 16:19:05  profilanswer
 

bah non, parceque là tu prends toutes les cotisations de l'année 2007, sans différencier les anciens abonnés des nouveaux.
 
Par contre :
 
select count(*) as var
from cotis c1
where c1.annee = ANNEE
and c1.montant_regle > 0
and not exists (select null form cotis c2 where c2.annee < c1.annee and c2.num = c1.num)
 
Déjà ça évite de faire X sous-requêtes.
 
Autre solution (mais il y a une légère différence, puisqu'un ancien abonné qui n'a rien payé l'année précédente est considéré comme nouveau, je ne sais pas si c'est possible et désiré)
 
select count(*)
from (
  select num, min(annee) annee
  from cotis
  where montant_regle > 0
  group by num
)
where annee = ANNEE

n°1528978
ajnag
where no man has gone before
Posté le 15-03-2007 à 16:24:00  profilanswer
 

ah oui, effectivement ;)
 

n°1528987
_sentenza_
Houba Houba Hop !!!
Posté le 15-03-2007 à 16:49:00  profilanswer
 

Merci bcp MagicBuzzz, ca marche nickel !
Et pis merci HFR, ca marche mieux que des forums spécialisés Access...
 :love:


---------------
Le Saoumfa

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Optimisation requetes imbriquées

 

Sujets relatifs
optimisation de statistiqueNbres de requetes sql par page
Executer plusieurs requetes Access (a la suite ) avec un seul bouton[RESOLU]Requêtes SQL ds un script...
Variables de session ou requêtes ?Une gridview avec deux requêtes SQL ?
Optimisation douteuse pour hypot()Optimisation C++/Sql
Tween - probleme et optimisationoptimisation des requetes SQL
Plus de sujets relatifs à : Optimisation requetes imbriquées


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)