Optimiser des requetes SQL

Signaler
Messages postés
127
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
11 juin 2008
-
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
-
Bonjour, j'ai actuellement un site web qui génère énormément de requêtes SQL et je voudrais savoir comment les optimiser sur une page en particulier,

En effet c'est une sorte de 'jeu' et la page est appellée très très souvent et par des centaines d'utilisateurs en simultané, du coup, cette page à elle seule me 'bloque' le serveur.

Il n'y a que trois requetes SQL mais je voudrais savoir s'il était possible de les optimiser ?

PS : Je fais régulièrement un nettoyage et une optimisation de mes tables !

Merci à vous, voici le script :

include "config.php";
$sql = "SELECT pseudo FROM `users` WHERE `points`>'5' AND `choix`='' ORDER BY RAND() LIMIT 0,1";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
$data = mysql_fetch_array($req);
$pseudo = $data['pseudo'];
mysql_close();

include "config.php";
$sql = "UPDATE `users` SET `points`=points-5, `stats`=stats+1 WHERE `pseudo`='".$pseudo."'";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
mysql_close();

include "config.php";
$sql = "UPDATE `users` SET `points`=points+5 WHERE pseudo='".$mypseudo."' // ICI $MYPSEUDO CEST UNE DONNEE CONTENU DANS LA SESSION DE LUTILISATEUR";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
mysql_close();

2 réponses

Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
Oui tu peux, déja tu include() un peu trop souvent à mon gout.

De plus, tu peux voir au niveau des procédures stockés.
Ta table doit être comme suit :

Users (id_user, pseudo_user, ...... );

Donc, c'est avec id_user que tu joues... pas avec son pseudo !

Ta première requète doit donc ressembler à ca :

$sql = 'SELECT id FROM users WHERE points >5 AND IS_NULL(choix)';
// Ce qui implique déja que points est un entier (ce qui ne l'est pas chez toi vu que tu utilises des quotes) et que choix peut être un champ de type NULL.

// Tu fais le query...()... etc...
$id_user = $data[0];

Et après, tu fais tes updates tranquillou en utilisant l'ID.
Une autre astuce peut être utilisé en utilisant les sous-requètes depuis l'UPDATE.

Un truc genre
UPDATE users SET ..... WHERE id = ( SELECT id FROM users WHERE ....) ;

A voir le plus rapide.
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Yop!
  Je vais peut être dire une connerie, mais éventuellement ajouté les pts en index? Ou bien créer une table ne contenant que id, points, stats si ta table originale contient bcp de champs?

@++

R@f

La boîte à bouts de codes
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"