optimisation d'une requete sql!

optimisation d'une requete sql! - SQL/NoSQL - Programmation

Marsh Posté le 04-02-2004 à 15:54:44    

j'aimerai savoir si il y a des limites dans le nombre de chaine de caractère que l'on peu mettre dans la condition NOT IN dans une requete.
 
 
peut on faire un truc du genre:
 

Code :
  1. select DISTINCT CODPRO from PRO where CODSOC=11 AND CODZN1='SL' AND CODPRO NOT IN ($produits_com) order by CODPRO


 
avec $produits_com aléatoire , a l'heure actuelle ca touren autour de  300 produits  
mais on peu imaginer qu'il y est bien plus de produits  par consequent la condition NOT IN serai bien plus grosse.
 
N'est-il pas preferable de ne pas mettre cette condition NOT IN et de tester ce que l'on veut une fois la requete effectué?


Message édité par saxgard le 04-02-2004 à 16:07:52
Reply

Marsh Posté le 04-02-2004 à 15:54:44   

Reply

Marsh Posté le 04-02-2004 à 16:05:24    

mon probleme c'est que je fais une requete via ODBC par le biais d'un script PHP sur une base oracle et plus particulièrement une table produit contenant plus de 250 000 enregistrement de produits (sans parler le grand nombre de champ de chaque enregistrement)
 
CODSOC est un champ indexé mais pas CODZN1
 
le problème c'est que la requete met bcp trop de temps, ca oscile entre 20s et plus d'1 minute , et par consequent pour un script php c'ets beaucoup trop long. (enfin je trouve)
 
et la j'essaye de voir comment optimiser ma requete au mieux


Message édité par saxgard le 04-02-2004 à 16:06:14
Reply

Marsh Posté le 04-02-2004 à 16:08:21    

bon je sais qu'odbc ralenti bcp l'execution mais pour l'instant il n'y a que ca qui marche  :/

Reply

Marsh Posté le 04-02-2004 à 16:21:20    

question con: comment obtiens-tu la valeur du NOT IN?

Reply

Marsh Posté le 04-02-2004 à 16:24:41    

gizmo a écrit :

question con: comment obtiens-tu la valeur du NOT IN?


 
en faite je fais une requete sur uen autre base de données pour connaitre l'exsitant  
 
et ensuite je fais une requete sur la base oracle pour recuperer ce que j'ai pas  
 
en gros je rempli la variable comme ca :

Code :
  1. $produits_com=$produits_com.","."'".$row_produits_com->products_name."'";


 
$row_produits_com->products_name <-- ce sont les resultat de la requete sur la 1er base

Reply

Marsh Posté le 04-02-2004 à 16:49:41    

ok, bah dans ce cas, je vois mal comment tu pourrais optimiser le bazard. Un not in sur un grand tableau, c'est foireux dès le départ, mais si tu ne sais pas récupérer les données autrement dans une table de la même db, ca me semble compromis.

Reply

Marsh Posté le 04-02-2004 à 17:08:34    

1) NOT IN c'est maxi lent c'est très mal.
2) Oui, cette chaîne est limitée en taille.
3) Par contre, un NOT IN (select * ...) n'est pas limité en taille (mais tu reviens dans deux ou trois heures)


Message édité par MagicBuzz le 04-02-2004 à 17:08:43
Reply

Marsh Posté le 04-02-2004 à 17:14:08    

MagicBuzz a écrit :

1) NOT IN c'est maxi lent c'est très mal.
2) Oui, cette chaîne est limitée en taille.
3) Par contre, un NOT IN (select * ...) n'est pas limité en taille (mais tu reviens dans deux ou trois heures)


 
par consequent vaut mieux faire la meme requete sans faire de contrainte avce un NOT IN
 
et ensuite faire une petite boucle pour controler vraiment ce que l'on veut récuperer?

Reply

Marsh Posté le 04-02-2004 à 17:18:15    

Non, faut réfléchir 5 minutes et réécrire la requête pour ne pas avoir besoin du not in.
 
Ta clause NOT IN est crée à partir de quoi ?


Message édité par MagicBuzz le 04-02-2004 à 17:20:23
Reply

Marsh Posté le 04-02-2004 à 17:19:18    

saxgard > j'y crois pas ! tu bosses sur GENERIX ? :D
 
lol, t'es où ? moi je suis chez GEMSE. A priori, t'y es pas, parceque tu bosses en mode multi-société :) (codsoc=11 et non pas 0)
 
Me suis bouffé 3 heures d'integrateur ce matin, j'en ai mal à la tête :D


Message édité par MagicBuzz le 04-02-2004 à 17:21:58
Reply

Marsh Posté le 04-02-2004 à 17:19:18   

Reply

Marsh Posté le 04-02-2004 à 17:28:31    

MagicBuzz a écrit :

saxgard > j'y crois pas ! tu bosses sur GENERIX ? :D
 
lol, t'es où ? moi je suis chez GEMSE. A priori, t'y es pas, parceque tu bosses en mode multi-société :) (codsoc=11 et non pas 0)
 
Me suis bouffé 3 heures d'integrateur ce matin, j'en ai mal à la tête :D


 
lol ouais je bosse sur Generix  au groupe grand sud ;)
 
et on pe pas dire que pour l'instant je sois bien fanne de Generix  , mais bon cela dit je connais que ca  lol

Reply

Marsh Posté le 04-02-2004 à 17:30:25    

bon nous reprendrons cette conversation demainje dois y aller ;)

Reply

Marsh Posté le 04-02-2004 à 17:33:04    

ok ;)
 
PS: Generix, c'est une grosse daube infâme :D
 
M'enfin ça marchouille, et l'avantage c'est qu'on peut accéder librement à la base, du coup c'est très ouvert, c'est le seul vrai avantage...


Message édité par MagicBuzz le 04-02-2004 à 17:33:14
Reply

Marsh Posté le 05-02-2004 à 09:45:01    

MagicBuzz a écrit :

ok ;)
 
PS: Generix, c'est une grosse daube infâme :D
 
M'enfin ça marchouille, et l'avantage c'est qu'on peut accéder librement à la base, du coup c'est très ouvert, c'est le seul vrai avantage...


 
nous on a quand meme pas mal de souci avec generix mais bon ;)

Reply

Marsh Posté le 05-02-2004 à 10:59:25    

n'hésite pas à me poser des questions, ça fait 5 ans que j'en bouffe quotidiennement :D

Reply

Marsh Posté le 05-02-2004 à 13:28:08    

MagicBuzz a écrit :

n'hésite pas à me poser des questions, ça fait 5 ans que j'en bouffe quotidiennement :D


 
woww cool merci pour ta proposition j'en prend bonne note  ;)
 
bin pour l'instant moi je fais juste des requetes sur la base oracle mais je ne touche pas vraiment a l'application generix
 
j'ai juste fais un intranet qui permet de referencer les produits et de creer des fichiers pres a etre integrer dans generix.
 
sinon bin la je suis entrain de rajouter des modules de commandes en ligne sur l'extranet et j'ai encore besoin de faire des requetes sur la base de generix  ;)
d'ou mes questions d'optimisations  
 
mais si j'ai des questions j'hesiterai pas  
puis toi de meme n'hesite pas  ;) (ok moi ca fais que 5 mois que je travail la  , mais bon on sait jamais)
 
 


Message édité par saxgard le 05-02-2004 à 13:30:27
Reply

Marsh Posté le 05-02-2004 à 13:53:01    

Moi non plus j'ai jamais touché à l'appli elle-même. De toute façon, tu peux pas, c'est la boîte générix qui a les sources et t'as pas le droit d'y toucher comme ça...
 
Ahhh, l'intégrateur, quelle joie :D

Reply

Marsh Posté le 05-02-2004 à 13:59:22    

Moi si tu veux, je suis en train de me faire chier à faire une MID (Marketing Information Database)
 
C'est pas relou du tout à faire :D
 
http://perso.wanadoo.fr/magicbuzz/mid.png

Reply

Marsh Posté le 05-02-2004 à 14:15:33    

MagicBuzz a écrit :

Moi si tu veux, je suis en train de me faire chier à faire une MID (Marketing Information Database)
 
C'est pas relou du tout à faire :D
 
http://perso.wanadoo.fr/magicbuzz/mid.png


 
oh bin ca doit etre sympas ;)
 
ma question va etre surement débile mais tu fais ca en quoi?
c'ets une appli web?  
 

Reply

Marsh Posté le 05-02-2004 à 14:39:52    

asp

Reply

Marsh Posté le 05-02-2004 à 14:59:15    


 
ok bin moi j'ai fais pendnat 1 an de l'asp je m'attaque a du php depuis 5 mois

Reply

Marsh Posté le 05-02-2004 à 15:06:23    

hérétique :o

Reply

Marsh Posté le 05-02-2004 à 15:15:53    


 :(

Reply

Marsh Posté le 05-02-2004 à 17:21:39    

groumpf.
 
- tiens, tu peux vérifier que sur le web et generix y'a bien les mêmes adresses pour ce client ?
- ok, pas de problème, je regarde ça tout de suite...
 
et là, j'attends, j'attends... 10 minutes plus tard, la page dans le manager du site s'affiche : le client a 193 adresses...
 
z'êtes sûr qu'il faut vérifier là ? nan parceque voilà quoi...

Reply

Marsh Posté le 05-02-2004 à 17:22:25    

lol, j'aime bien y'a la moitiée des adresses du client qui sont :
 
"ATTENTION DE BIEN LIVRER A L'ADRESSE CI-DESSUS ET PAS A UN AUTRE CLIENT COMME AU MOIS DE DECEMBRE" :lol:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed