Optimiser des requetes SQL

AtomiKiller Messages postés 127 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 11 juin 2008 - 22 févr. 2007 à 15:13
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 - 23 févr. 2007 à 13:06
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

FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
22 févr. 2007 à 15:27
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.
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
23 févr. 2007 à 13:06
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???"
0
Rejoignez-nous