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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [sql] optimisation requete sql

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[sql] optimisation requete sql

n°664834
red factio​n
Posté le 05-03-2004 à 21:29:40  profilanswer
 

voila jai une requette qui prend pas mal de temp :
 
select distinct P.NAME_SEC,LI.USRCRITLINE,L.REF_USRCRIT from USRCRITLIST L,USRCRITLINE LI,TMP_PROFILER P where  L.REF_USRCRIT not in  (select T.REF_USRCRIT from TMP_PROFILER T where T.ID_SEC = P.ID_SEC  )  and L.REF_USRCRITLINE = LI.ID_USRCRITLINE order by ID_SEC
 
jai dabord pense a changer mon distinct par un group by mais apparament ca change pas grand chose
le not in (qui ralenti tout) jai pas reussi a le remplacer par un not exists a cause du where deja existant  
 
si qqn a une idee...
 
sinon existe til dans le commerce un logiciel qui permettrait doptimiser les requetes sql ?


Message édité par red faction le 05-03-2004 à 22:41:32
mood
Publicité
Posté le 05-03-2004 à 21:29:40  profilanswer
 

n°664937
MagicBuzz
Posté le 05-03-2004 à 23:06:09  profilanswer
 

tes champs sont pas assez explicites, j'arrive pas à me représenter ta base en tête...
 
tu pourrais poster la description de tes tables et ce qu'elles contiennent ?
 
sinon, j'ai quand même l'impression que t'as un problème de conception à la base... je me sert jamais de distinct... si t'en as, c'est que t'as une table qui doit pouvoir être splittée en deux, où alors y'a ujn truc qui cloche dans ta requête... j'ai du mal à concevoir ce qu'on peut faire avec des données sans filtre discriminant à par un count/sum/avg...

n°664939
MagicBuzz
Posté le 05-03-2004 à 23:07:41  profilanswer
 

sinon, le exist, tu peux quand même l'utiliser... suffit de rajouter dans la sous-requête "and T.REF_USRCRIT = L.REF_USRCRIT" logiquement.

n°664995
bill_clint​on
nonon j'ai pas de stagiaire ..
Posté le 06-03-2004 à 00:35:52  profilanswer
 

normal que ca rame car tu a ta table "tmp_profiler P" qui n'est pas linkée avec une autre donc il va parcourir ta table entièrement à chaque ligne même avec le distinct
sinon pour ce que tu veux faire, essaye toujours avec :
 
select P.NAME_SEC,LI.USRCRITLINE,L.REF_USRCRIT from USRCRITLIST L,USRCRITLINE LI where  L.REF_USRCRIT not in  (select REF_USRCRIT from TMP_PROFILER)  and L.REF_USRCRITLINE = LI.ID_USRCRITLINE order by ID_SEC  
 
ca devrait te donner le même résultat mais en un peu plus rapide ..


Message édité par bill_clinton le 06-03-2004 à 00:37:13
n°665002
red factio​n
Posté le 06-03-2004 à 00:42:56  profilanswer
 

bill_clinton a écrit :

normal que ca rame car tu a ta table "tmp_profiler P" qui n'est pas linkée avec une autre donc il va parcourir ta table entièrement à chaque ligne même avec le distinct
sinon pour ce que tu veux faire, essaye toujours avec :
 
select P.NAME_SEC,LI.USRCRITLINE,L.REF_USRCRIT from USRCRITLIST L,USRCRITLINE LI where  L.REF_USRCRIT not in  (select REF_USRCRIT from TMP_PROFILER)  and L.REF_USRCRITLINE = LI.ID_USRCRITLINE order by ID_SEC  
 
ca devrait te donner le même résultat mais en un peu plus rapide ..


ta retiré tmp_profiler du premier select c ca ?
jpourrait plus avoir name_sec alors

n°665004
MagicBuzz
Posté le 06-03-2004 à 00:45:15  profilanswer
 

vi, elle est buggé sa requête :)
 
maos je suis d'accord avec la première partie : lie ta table avec les autres.

n°665007
red factio​n
Posté le 06-03-2004 à 00:46:47  profilanswer
 

sinon je posterait un schema avec les tables importantes (3 ou 4) comme ca si qqn sait maider...
 

n°665026
red factio​n
Posté le 06-03-2004 à 01:30:53  profilanswer
 

http://users.skynet.be/fa218598/schema.jpg
 
Bon jvais essayer de faire simple (spa gagné) :
 
Jai un ensemble d?objets et pour chaque objet je peut associer un critere et une valeur par exemple :
a lobjet  «Voiture» jassocie le  critere «couleur» et la valeur « bleu » puis aussi le critere « matiere » et  la valeur « metal »
Les relations entre les objets et les critere et valeurs qui lui sont associees sont réalisée grace a la table « relobject »
 
 
ensuite je doit pouvoir effectuer des recherches sur ces objets suivant leur valeurs qui leur ont ete  associees
 
Pour cela je definit une page dans lequel je vais placer des lignes (represente par la table LIGNE)
Et des colonnes qui sont en fait des criteres
 
Dans lintersection dune ligne et une colonne je place des valeurs
 
Page : test
         Couleur         Marque         Année          Type
Ligne 1  rouge,vert                    93,94,95            
Ligne 2                  BMW,Audi               Break, 3portes
Ligne 3
Ligne 4  jaune,rouge
 
 
Les relations entre lignes, colonnes et valeur sont faites grace a la table LISTE
 
Par exemple pour correspondre a ligne 1 y faut soit quelle soit rouge soit verte  ET quelle soit de 93 94 ou 95
pour la ligne 4 elle doit etre soit jaune soit rouge
 
Au final, je doit afficher pour chaque objet les lignes qui lui correspondent, et surtout pourquoi (a cause de quels valeurs)
 
dans lexemple de la voiture du debut on  a la ligne 4 car elle est rouge mais pas la ligne 1 parce quil lui manque lannee (on c pa de quelle annee elle est)
 
Au depart javais fait ca par programmation , mais cetait 1000x trop lent (jai a peu pres 8000 objetcs et pleins de valeurs associees a ces objets)
et comme je peut pas utiliser de procedure stockee... donc faudrait que je fasse tout dans une requete
 
jespere que certain on eu le courage de tout lire et pourront maider  :)  
ne chercher pas le lien avec la requete du dessus certains noms on ete modifies (pour faire plus simple) puis la table qui etait la est une table temporaire dont jaimerai bien me passer  :o


Message édité par red faction le 06-03-2004 à 11:46:07
n°665033
bill_clint​on
nonon j'ai pas de stagiaire ..
Posté le 06-03-2004 à 01:54:55  profilanswer
 

lol, j'avais oublié que tu voulais aussi name_sec, alors ca serait du style :
 
select P.NAME_SEC,LI.USRCRITLINE,L.REF_USRCRIT from USRCRITLIST L, USRCRITLINE LI
  left join tmp_profiler p on p.[ton_id] = [LI/L].[ton_id]
    where  L.REF_USRCRIT not in  (select REF_USRCRIT from TMP_PROFILER)  and L.REF_USRCRITLINE = LI.ID_USRCRITLINE order by ID_SEC
 
sinon pour le post du dessus j'ai pas du tout pigé ce que tu voulais faire ..


Message édité par bill_clinton le 06-03-2004 à 01:58:41
n°665051
MagicBuzz
Posté le 06-03-2004 à 03:05:11  profilanswer
 

verrai ça demain...
 
ton système de descripteur m'a l'air bancal, mais je suis trop naze pour y réfléchir :D pis faut que je remette d'aplomb mon serveur que j'ai sauvagement planté :sweat:


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

  [sql] optimisation requete sql

 

Sujets relatifs
[sql/php] Optimisation simple de requete ?optimisation d'une requete sql!
[SQL] Optimisation d'une requeteoptimisation de requete
[SQL] optimisation de requête....[SQL] requete (optimisation toute simple help!!!!)
[mysql]optimisation d'un requete[MySQL]optimisation requete
Optimisation d'une requête. Laquelle choisiriez-vous ?[MYSQL PHP] Requete ne renvoyant qu'1 champ, optimisation du code.
Plus de sujets relatifs à : [sql] optimisation requete sql


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR