Problème requête SQL - SQL/NoSQL - Programmation
Marsh Posté le 05-01-2006 à 15:57:37
commence par remplacer ton "not in" par un "not exists".
tu devrais déjà gagner énormément de temps. (les IN, c'est mortel, alors qu'un EXISTS, ça fait simplement une jointure, c'est le jour et la nuit)
Marsh Posté le 05-01-2006 à 17:44:41
regarde la doc du exists hein... c'est pas synonyme de in, faut fairequelques modifs quand même
Marsh Posté le 05-01-2006 à 17:47:23
c'est bon moi avoir suivi des études en bases de données, moi avoir
Marsh Posté le 05-01-2006 à 17:48:34
ben alors dit pas bêtement "il me renvoit aucune valeur", puisque toute clause "in" portant sur une sous-requête peut être remplacée pas une clause "exists" et ça donne le même résultat.
c'est donc que tu l'as mal écrite.
Marsh Posté le 05-01-2006 à 17:52:54
mais je ne dis pas bêtement il ne me revoit aucune valeur.
Tu pourrais me parler autrement.
Tu connais rien au gens et tu ramènes ta science...
Marsh Posté le 05-01-2006 à 19:25:55
Attends, je t'arrête tout de suite.
Moi je te répond comme tu me parles. C'est pas moi qui ai commecé à écrire en petit nègre genre "vas-y prends-moi pour une conne, je te dirai rien".
Je te donne un conseil, tu me réponds simplement "ça marche pas", sans même poster le requête que t'as testé. Comment veux-tu qu'on t'aide ?
L'année 2006 promet d'être terrible... Vous avez quoi tous en ce moment à être inbuvables et insultants ? J'ai pas que ça à foutre que de venir filer des coups de main sur ce forum. Et c'est pas pour l'aide que j'en reçois que je peux dire que ça m'est bénéfique.
Tu te rammène comme une fleur avec deux requête qui, sans aucune info, ne nous permet pas de voir en quoi elles sont utiles, ni ce que tu veux faire. Et tu nous demande un coup de main.
Si y'a que moi qui me suis pris la peine de te répondre, c'est pas pour rien : ta question, c'est une cause perdue, on sait ni ce que tu veux faire, ni à partir de quoi, ni même avec quel SGBD. J'arrête le masochisme, et je m'emmerde plus à tenter de filer des coups de main à ceux qui sont pas foutus d'exposer leur problème clairement.
Tant pis pour ceux qui débuttent et qui ne savent pas par où s'y prendre, moi j'en ai marre de me faire recevoir de la sorte quand j'essaie d'aider quelqu'un en dépit de tout.
Marsh Posté le 05-01-2006 à 19:28:47
Pour information, "MINUS" est supporté par un nombre très réduit de SGBD, et pour cette raison je te déconseille de l'utiliser.
Deplus, la plupart des éditeurs de SGBD qui implémentent cette fonction restent très humbles en annonçant que les perfs ne seront pas forcément au rendez-vous car étant donné que peu de monde utilise cette fonction, ils préfèrent concentrer leurs efforts d'optimisation sur les parties courrament utilises (genre les not exists...)
Marsh Posté le 06-01-2006 à 08:32:08
ReplyMarsh Posté le 06-01-2006 à 08:55:56
Tant pis je n'aurais pu ton aide...
et je ne vois pas qu'est ce que ça rapporterait si je te disait ce que ramène cette requête...
la chose serait la même...
j'ai besoin de données d'une table qui ne doivent pas être dans une autre table.
C'est tout ce que je peux dire...Mais bon c'est pas grave....
Merci de ton AMABILITE...tchao
Marsh Posté le 06-01-2006 à 09:11:40
tu ne connais manifestement rien des SGBD (sinon tu aurais indiqué les infos utiles qui nous aurait permis de t'aider). Engage plutot quelqu'un qui s'y connait, ca ira plus vite. Y'a plein d'informaticien de dispo sur le marché du travail.
Marsh Posté le 06-01-2006 à 09:18:26
Ok ok...je l'avoue...je n'ai pas fait d'études en sgbd, requ^tage, ca ne fait pas 2 ans que je travaille dedans..non...
Enfin j'ai trouvé un autre forum où les personnes doivent mieux s'y connaitre que vous (explain plan, performances et tout) je vais donc de ce pas me désinscire...et bonne continuation à votre site.
Marsh Posté le 06-01-2006 à 09:32:07
lol, ils en sont à te demander un explain plan pour ce genre de problème ?
Marsh Posté le 06-01-2006 à 11:03:18
deja je vois un moyen d'optimiser de facon drastique la requete, si c'etait du DB2... Bien sur, comme on ne sait rien...
Marsh Posté le 06-01-2006 à 11:47:02
Ca m'intéresse ton truc pour DB2, même si j'ai jamais eu l'occasion de m'en servir, ça peut toujours être intéressant
Marsh Posté le 06-01-2006 à 11:53:11
dans db2 il ne faut jamais utiliser de fonctions (genre les substr que je vois la), ca te plombe des requetes d'une facon assez impressionnante
En DB2 7.2 du moins
Marsh Posté le 06-01-2006 à 12:20:42
Ah ? C'est tout ?
C'est pareil avec tous les SGBD, mise à part quelques fonction, généralement ça fait claquer les index, puisque "substr(toto, 2, 1)" ne sera pas dans le même ordre que "toto", et ça fait pareil avec la plupart des fonctions
Marsh Posté le 06-01-2006 à 12:50:06
oui mais la c'est sans communes mesures... meme apres tuning de base...
Marsh Posté le 06-01-2006 à 14:12:20
je dirais "surtout" après tuning de la base
puisque 80% du tuning vient de la gestion des index
Marsh Posté le 06-01-2006 à 14:28:34
Bravo claralavraie pour ta boulettitude.
Une personne t'aide et tu l'envoi chier, ben tu ne mérites pas que quelqu'un prenne du temps pour toi.
Marsh Posté le 06-01-2006 à 15:21:08
ReplyMarsh Posté le 06-01-2006 à 16:05:09
http://forum.hardware.fr/hardwaref [...] m#t1278265
Histoire de mettre les point sur les I (en maj, y'en a pas c'est rigolo ) histoire de voir que :
1) Le NOT EXISTS est effectivement la meilleur solution
2) Le NOT EXISTS retourne les mêmes valeurs qu'un NOT IN, quand on sait l'écrire
3) Ici aussi on sait faire des Explain Plans et on sait même les interpréter (terrible non ?)
Marsh Posté le 06-01-2006 à 17:39:39
Faut juste faire attention à la gestion de la valeur NULL ...
Et puis je suis certain qu'il y a des exemples où le NOT IN est plus rapide que le NOT EXISTS, sur certains SGBD, donc ne pas généraliser : TESTER !
Marsh Posté le 05-01-2006 à 14:43:14
Bonjour,
je dois créer une requête qui fait un count d'une colonne.
Dans ma clause where, j'ai différentes conditions dont un not in.
Voici le code
les 2 requêtes, séparément s'ecute relativement vite.
la 1ère ramène environ 3000 rows tandis que la seconde 130000.
Au bout d'une heure ma reuqête n'est pas terminée.
Est ce que quelqu'un a une idée pour rendre plus performante cette requête.
J'ai trouvé une requête qui s'execute vite mias je me demande si la syntaxe est correte:
la voici: