JeuWeb - Crée ton jeu par navigateur
[Résolu] Optimisation du nombre de requêtes SQL - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu] Optimisation du nombre de requêtes SQL (/showthread.php?tid=2052)



[Résolu] Optimisation du nombre de requêtes SQL - Julios54 - 17-04-2008

Bonsoir (ou bon matin), voila, après avoir avancé un peu dans la création de mon premier jeu en PHP, une question me trotte dans la tête ^^

En effet, j'utilise énormément de requêtes SQL (à mon goût) pour l'affichage de mes pages. Grossomodo, j'ai entre 20 et 30 requêtes par page.

Tout est codé en POO, avec un modèle MVC (à ma sauce, et je ne suis pas très bon cuisinier lol).
En fait, au début de ma page principale, je récupère toutes les données dont j'ai besoin comme le personnage du joueur, sa race, sa classe, la carte, la région et la zone ou se trouve le personnage...

Bref, pour chacune des données dont j'ai besoin, j'effectue déjà 2 requêtes (1 pour savoir si la requête retourne un résultat, et l'autre pour récupérer les valeurs dans la Table).

Sans compter les autres infos dont j'ai besoin pour afficher un inventaire, effectuer des actions ,etcetera.

Pour en revenir a la question que je me posais ^^ Est-ce-que 20 a 30 requetes est normal ou alors il faut que j'optimise mes requetes ? Si oui, comment faire ? En mettant en cache les données qui ne changent jamais (comme la race du personnage ou sa classe) par exemple ?

Merci de votre aide Smile


RE: Optimisation du nombre de requetes SQL ? - Sephi-Chan - 17-04-2008

Bonjour,

Effectivement 20 à 30 requête c'est beaucoup, surtout que je pense qu'il y en a un paquet d'inutiles.

Plutôt que de faire une requête qui indique s'il y a un résultat, tu peux directement faire ta requête et utiliser mysql_num_rows($handle) ou mysql_affected_rows().

J'édite une fois à l'école.


Sephi-Chan


RE: Optimisation du nombre de requetes SQL ? - Dolphy - 17-04-2008

Je ne sais pas comment est organisé ta BDD mais quand je lis ça :
Citation :En fait, au début de ma page principale, je récupère toutes les données dont j'ai besoin comme le personnage du joueur, sa race, sa classe, la carte, la région et la zone ou se trouve le personnage...

Je pense que certaines infos ne varient pas souvent (par exemple la race et la classe du joueur) donc pourquoi ne pas utiliser une session, comme ça tu charge les infos une bonne fois pour toute à l'identification du joueur et c'est réglé. Au besoin après tu modifies les infos dans la session si besoin.
Ca fait déjà une économie de quelques requêtes je pense.


RE: Optimisation du nombre de requetes SQL ? - Julios54 - 17-04-2008

Donc j'ai suivi vos conseils, au lieu de recuperer le nombre de ligne d'un resultat, j'ai utilisé la fonction mysql_num_rows, ce qui m'a deja fait economiser moitié moins de requetes.

Et ensuite, j'ai mis les objets qui ne changeaient pratiquement jamais dnas des variables de session, ce qui me fait economiser encore quelques requetes Smile

Jen suis a environ 10 requetes maintenant, mais je pense que je vais devoir optimiser mon code plus que ca, car je n'en suis qu'au debut de mon projet et les requetes ne vont cesser d'augmenter ..

En tout cas merci de vos conseils Smile


RE: Optimisation du nombre de requetes SQL ? - Eluox - 17-04-2008

Rassur moi, tu fait pas de requetes dans des boucles ?


RE: Optimisation du nombre de requetes SQL ? - Julios54 - 17-04-2008

Non je te rassure ^^

En fait, pour chaque table dans ma base de données, j'ai une classe qui lui correspond, par exemple si je veux recuperer mon personnage en fonction de son id, je fais Personnage::get_personnage_by_id($id), ce qui fiat un acces a la bdd, et en fait je fais ca pour tout ce dont j'ai besoin.

Par exemple, un Objet appartient a un Type_objet.
Pour connaitre le type de l'objet, je recupère mon objet, ensuite je recupere son type grace au type_id que j'ai recupéré dans objet.

Ca fait 2 requetes, donc je vais essayer de rassembler ce type de requete en une seule avec une jointure, je gagnerais plusieurs requetes grace a ca.


RE: Optimisation du nombre de requetes SQL ? - Eluox - 17-04-2008

Au passage, avoir 10 requêtes par pages, c'est pas non plus la fin du monde, au moin faut les optimiser Wink

Du genre si tu recupère que un id, fait pas un select *, ect


RE: Optimisation du nombre de requetes SQL ? - Julios54 - 17-04-2008

^^ oui a ce niveau la c'est optimisé, et maintenant, j'ai fait des jointures, et la je tombe a 5 à 10 requetes par pages Smile

Merci de vos conseils


RE: Optimisation du nombre de requetes SQL ? - keke - 18-04-2008

Coucou !
Cela dit, parfois 2 requêtes valent mieux qu'une. Si tu utilises ORACLE, tu as des outils d'administration qui permet de localiser les tables, les requêtes qui sont les plus fréquentes et les plus gourmandes. N'hésites pas à utiliser des indexes sur des tables qui varient peu (la liste des espèces de ton jeu).

Kéké.