Requetes php

Statut
N'est pas ouverte pour d'autres réponses.

DeScH

AstaLaVista
Voila j'ai une qustion qui me trote dans la tete. Vaut-il mieux se connecter à la base de données plus longtemps et faire 4-5 requetes en une fois ou vaut-il mieux se connecter moins longtemps et faire 1 ou 2 requetes à la dois?

Comment faire pour alléger les requetes en fait? y a-t-il moyen par des boucles? Car j'ai un probleme de lenteur sur mon site :-s

Merci :)

ps: J'ai besoin de +/- 4 requetes par page plus celle du forum phpbb
 

zoheir

cvm.mangaleet()
Fais toutes tes requetes sur la meme connexion...
Poste les afin de voir si y'a moyen de tuner tout ca :p
 
1er
OP
DeScH

DeScH

AstaLaVista
houla tu vas en avoir un paquet :D

je les place après ;)
 
1er
OP
DeScH

DeScH

AstaLaVista
Code:
$reqlastnews = mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT 0,15");
$reqcontenu = mysql_query("SELECT * FROM news WHERE categorie='news' ORDER BY id DESC");
$nbre_cont= mysql_query("SELECT COUNT(*) AS nbre_don FROM news");

Voici les premieres, si on sait les modifier j'essaierai moi meme de tuner les autres :cool:

Et aussi, comment faire pour utiliser le résultat d'une requête plusieurs fois? donc refaire un while du type while ($don =myssql_fetch_array($req)... sans devoir a chaque fois refaire la requete?
 

zoheir

cvm.mangaleet()
Tu peux déjà executer ton count dans la 1ere/2eme requete en ajoutant un GROUP BY..
 

II phl II

Touriste
Code:
$reqlastnews = mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT 0,15");
Je suppose que cette requête sert à lister les titres des 15 dernières news ... si c'est le cas tu n'es pas obligé de sélectionner l'ensemble de la table news.
Donc SELECT * FROM news deviendrait SELECT title FROM news
 
1er
OP
DeScH

DeScH

AstaLaVista
oui. Oui en effet.
Mais n'y a-t-il pas moyen de faire un mix pour n'avoir qu'une requete a la place de deux vu qu'on travaille sur la meme table?
 

Bingo

Beer Addict
DeScH a dit:
oui. Oui en effet.
Mais n'y a-t-il pas moyen de faire un mix pour n'avoir qu'une requete a la place de deux vu qu'on travaille sur la meme table?
Tu peux supprimer la 3ème requête, si tu transformes la première en ajoutant "SQL_CALC_FOUND_ROWS", et si tu utilises "FOUND_ROWS()" juste après :

$reqlastnews = mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM news ORDER BY id DESC LIMIT 0,15");
$nbre_cont= mysql_query("SELECT FOUND_ROWS() AS nbre_don");
$reqcontenu = mysql_query("SELECT * FROM news WHERE categorie='news' ORDER BY id DESC");

Enlever le "SELECT *" pour le remplacer par "SELECT <ce qu'il faut>" est de toutes façons absolument indispendable.

Ensuite, pour ta requête "reqcontenu", tu peux essayer avec un index multi-colonnes: CREATE INDEX idx_news_categ_id ON news (categorie, id DESC);
Si ça n'améliore rien, n'oublie pas de supprimer l'index pour ne pas que le serveur continue à le mettre à jour (ça pénaliserait un peu les performances).
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut