optimisation d'une requete [PHP - MYSQL] - PHP - Programmation
Marsh Posté le 16-08-2004 à 00:27:23
Essaye de ne pas faire $y_max*$x_max requête !
Tu déclare un tableau php.
Tu fais la requête unique "SELECT id, nom, x, y FROM systeme"
Pour chaque ligne tu remplis ton tableau ( genre tab[x+y*x_max]=$row )
Puis tu fais tes 2 boucles dans lesquelles tu testes l'existence de tab[$i+$k*x_max]
Marsh Posté le 16-08-2004 à 01:00:33
Puis il y a sûrement moyen de "simplifier" la requête genre
Code :
|
non ?
Marsh Posté le 16-08-2004 à 01:34:05
pascal_ a écrit : Essaye de ne pas faire $y_max*$x_max requête ! |
Ta solution ma l'aire logique, une seul requete ça ira normalement beaucoup plus vite.
PAr contre j'ai jamais utiliser de tableau en PHP... je vais m'y mettre...
@naceroth : oui tu as raison aussi j evais combiner vos deux reponse et voir le résultat...
Merci a tous les deux.
Marsh Posté le 17-08-2004 à 01:32:49
[Question bête] tu as créé les index appropriés ?
Pour avoir des infos, fais EXPLAIN suivi de ta requête SQL.
Marsh Posté le 19-08-2004 à 14:52:30
@Kalex : heu, non je ne crois pas avoir fais d'index... voici le resultat de ce que tu m'a demander.
requête SQL: EXPLAIN SELECT id, nom, x, y FROM systeme WHERE ( x BETWEEN 0 AND 22 ) AND ( y BETWEEN 0 AND 22 );
table type possible_keys key key_len ref rows Extra
systeme ALL NULL NULL NULL NULL 4034 Using where
@Pascal_ : j'ai bien compris ta logique par contre je metrise pas du tout les array en php, j'ai regarder sur nexen et phpdebutant mais là je lutte.
est ce qu'il faut que je crée un tableau par ligne ? ou bien créer un tableau a plusieur dimension ?
je ne comprend pas ta syntax : tab[x+y*x_max]=$row les "+" "*" ?? ils servent a quoi ?
Marsh Posté le 19-08-2004 à 15:04:22
guiotv2 a écrit : @Kalex : heu, non je ne crois pas avoir fais d'index... voici le resultat de ce que tu m'a demander. |
Le ALL signifie que Mysql doit parcourir toute la table en entier pour trouver les informations. Essaye de mettre deux index, un sur le champ x l'autre sur le champ y (ça se fait en 3 click avec phpMyAdmin). Fait le surtout si ta table contient beaucoup de lignes.
guiotv2 a écrit : |
C'est un tableau 2 dimensions ramené à 1 dimension.
Php gère les tableaux plusieurs dimension apparemment (jamais testé), ce qui donnerait alors : tab[$x][$y]=$row
Marsh Posté le 19-08-2004 à 15:24:32
@pascal : Mysql parcours la totalite de la table meme si on met un "where ...." ??
En fait il suffit de 2 click avec phpmyadmin !
Je crois que je vais devenir maboul pour les tableu en plusieur dimensions !
je reviendrais ici, si je n'y arrive pas !
Merci !
Marsh Posté le 19-08-2004 à 18:21:17
guiotv2 a écrit : @Kalex : heu, non je ne crois pas avoir fais d'index... voici le resultat de ce que tu m'a demander. |
Ok, c'est totalement normal que ce soit lent !
La doc : http://www.nexen.net/docs/mysql/annotee/explain.php
Marsh Posté le 19-08-2004 à 18:42:22
4034 tupples à examiner ? tu m'étonnes que ce soit lent, surtout sans index
Marsh Posté le 19-08-2004 à 18:45:04
naceroth a écrit : 4034 tupples à examiner ? tu m'étonnes que ce soit lent, surtout sans index |
4034 tuples, normalement c'est rien du tout à examiner, même sans index...
Marsh Posté le 19-08-2004 à 19:08:20
Le normalement est important, j'en ai déjà vu ramer pour beaucoup moins que ça
Marsh Posté le 19-08-2004 à 20:15:24
guiotv2 a écrit : @pascal : Mysql parcours la totalite de la table meme si on met un "where ...." ?? |
Les tableaux multi dimensions, c'est pas plus compliqué que ceux à une ! Il suffi de te dire que ton tableau ne s'appelle pas $tab, mais $tab[1], c'est juste un tableau normal stoquer dans un tableau. Tu y accèdes "normalement" :
$tab[0] : le premier tableau stoqué dans $tab.
$tab[0][0] le premier élément du tableau $tab[0].
Un tableau c'est juste une manière pratique de représenter des variables.
Marsh Posté le 19-08-2004 à 20:47:02
naceroth a écrit : Le normalement est important, j'en ai déjà vu ramer pour beaucoup moins que ça |
regarde sa requète, elle n'a rien d'extra-ordinaire. Dans la db dont je m'occupe, on a fait de test avant de mettre les indexs, les temps de réponses avec 6-7 jointures étaient encore acceptables avec une moyenne de 200K tuples.
Marsh Posté le 20-08-2004 à 01:18:53
He bien !
y a eu du monde depuis que je suis passé !
Merci Kalex pour tes explication.
J'ai un peu galérer pour comprendre comment ça fonctionnait mais j'y suis arriver.
Et je peux vous dire qu'avec les index + l'utilisation des tableaux et bien l'affichage est 10 fois plus rapide !
Merci à tous !
Marsh Posté le 15-08-2004 à 22:52:37
Bonjour,
je post mon code afin qu'on puisse m'aider à l'optimiser car tout fonctionne mais c'est tres lent...
Message édité par guiotv2 le 19-08-2004 à 12:07:44