Normalement, une procédure stockée est dans tous les cas plus rapide puisqu'elle est pré-compilé sur le serveur. Donc on transfert beaucoup moins d'informations du client au serveur et le serveur travaille moins du coup puisqu'il n'a pas besoin de la réinterpréter à chaque fois.
Après je ne sais pas combien de millisecondes ça fait gagner par rapport aux autres méthodes et ce serait assez galère de faire les benchmarks, mais depuis que je l'ai mise la charge du serveur a été divisé par 1.5. Donc dans mon cas, c'est bien utile ^^.
Et sinon voici la vrai requête que j'utilise, celle que je donnais c'était juste pour faciliter la vue de mon problème :
Un peu plus compliqué que l'autre, et l'appeler toutes les 2 secondes méritait quand même que je la mette en procédure stockée.
Ensuite est ce que remplacer le BETWEEN par les opérateurs directement est plus rapide ?
Après je ne sais pas combien de millisecondes ça fait gagner par rapport aux autres méthodes et ce serait assez galère de faire les benchmarks, mais depuis que je l'ai mise la charge du serveur a été divisé par 1.5. Donc dans mon cas, c'est bien utile ^^.
Et sinon voici la vrai requête que j'utilise, celle que je donnais c'était juste pour faciliter la vue de mon problème :
SELECT UNIX_TIMESTAMP() as timestamp_, action_, action_lien, sortRecu, typeSortRecu, sortRecuPar, P.idJoueur, pseudo, x, y,
pvActuel, pvMax, reiatsuActuel, reiatsuMax, niveau, xp, koro, reputation, rang, clan, sexe, shinigami,
humain, transformation, combatEnCours, demandeCombat, etatPersonnage, boostPersonnage, avatarMJ
FROM personnage P
JOIN joueur J
JOIN caracteristique C
on J.idJoueur = P.idJoueur and C.idJoueur = P.idJoueur
WHERE x BETWEEN $minX and $maxX and y BETWEEN $minY and $maxY AND UNIX_TIMESTAMP(derniereActualisation) > (UNIX_TIMESTAMP()-600) AND P.idCarte = 0
Un peu plus compliqué que l'autre, et l'appeler toutes les 2 secondes méritait quand même que je la mette en procédure stockée.
Ensuite est ce que remplacer le BETWEEN par les opérateurs directement est plus rapide ?