optimisation d'une requete sql! - SQL/NoSQL - Programmation
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
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
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 :
|
$row_produits_com->products_name <-- ce sont les resultat de la requete sur la 1er base
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.
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)
Marsh Posté le 04-02-2004 à 17:14:08
MagicBuzz a écrit : 1) NOT IN c'est maxi lent c'est très mal. |
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?
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 ?
Marsh Posté le 04-02-2004 à 17:19:18
saxgard > j'y crois pas ! tu bosses sur GENERIX ?
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
Marsh Posté le 04-02-2004 à 17:28:31
MagicBuzz a écrit : saxgard > j'y crois pas ! tu bosses sur GENERIX ? |
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
Marsh Posté le 04-02-2004 à 17:30:25
bon nous reprendrons cette conversation demainje dois y aller
Marsh Posté le 04-02-2004 à 17:33:04
ok
PS: Generix, c'est une grosse daube infâme
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...
Marsh Posté le 05-02-2004 à 09:45:01
MagicBuzz a écrit : ok |
nous on a quand meme pas mal de souci avec generix mais bon
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
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 |
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)
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
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
http://perso.wanadoo.fr/magicbuzz/mid.png
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) |
oh bin ca doit etre sympas
ma question va etre surement débile mais tu fais ca en quoi?
c'ets une appli web?
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
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...
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"
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:
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