optimisation requete sql [sql] - SQL/NoSQL - Programmation
Marsh Posté le 05-03-2004 à 23:06:09
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...
Marsh Posté le 05-03-2004 à 23:07:41
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.
Marsh Posté le 06-03-2004 à 00:35:52
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 ..
Marsh Posté le 06-03-2004 à 00:42:56
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 |
ta retiré tmp_profiler du premier select c ca ?
jpourrait plus avoir name_sec alors
Marsh Posté le 06-03-2004 à 00:45:15
vi, elle est buggé sa requête
maos je suis d'accord avec la première partie : lie ta table avec les autres.
Marsh Posté le 06-03-2004 à 00:46:47
sinon je posterait un schema avec les tables importantes (3 ou 4) comme ca si qqn sait maider...
Marsh Posté le 06-03-2004 à 01:30:53
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
Marsh Posté le 06-03-2004 à 01:54:55
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 ..
Marsh Posté le 06-03-2004 à 03:05:11
verrai ça demain...
ton système de descripteur m'a l'air bancal, mais je suis trop naze pour y réfléchir pis faut que je remette d'aplomb mon serveur que j'ai sauvagement planté
Marsh Posté le 05-03-2004 à 21:29:40
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