[ MySQL ] optimisation, parlons-en ( newbee inside )

optimisation, parlons-en ( newbee inside ) [ MySQL ] - PHP - Programmation

Marsh Posté le 10-06-2003 à 20:49:40    

Quels sont les "trucs" pour optimiser ses requetes MySQL ?
prenon l'exemple ( parlant ) d'un forum
et de sa page pour afficher la liste des sujets
20 sujets parmis 20 000 le tout en moin de 0.05 sec...
comment faire ? comment marchent les index et autres "trucs" ?
quels type de champs préferer aux autres ? ( VARCHAR vs MEDIUMTEXT... )
 
j'ai besoin d'aide, de conseils...

Reply

Marsh Posté le 10-06-2003 à 20:49:40   

Reply

Marsh Posté le 10-06-2003 à 20:58:05    

pour mon forum, je fais du 0.14 sec pour 10'000 sujets sur la page sujet
et 0.2 sec pour 1 réponse ( et 10'000 sujets avec 1 reponse par sujet ) sur la page des messages...
 
mes requetes "pour l'exemple" :
SUJET :

SELECT id,ico,titre,nbr_rep,nbr_vu,auteur,dernier,dernierp  
FROM sujet  
USE INDEX(dernier)  
WHERE cat='$cat'  
ORDER BY `dernier` DESC  
LIMIT $lim,$nspp


MESSAGES :

SELECT id,nom,date,message  
FROM message  
USE INDEX(date)  
WHERE sujet='$sujet'  
ORDER BY 'date'  
LIMIT $lim,$nrpp

Reply

Marsh Posté le 10-06-2003 à 22:19:05    

J-'-R a écrit :

pour mon forum, je fais du 0.14 sec pour 10'000 sujets sur la page sujet
et 0.2 sec pour 1 réponse ( et 10'000 sujets avec 1 reponse par sujet ) sur la page des messages...
 
mes requetes "pour l'exemple" :
SUJET :

SELECT id,ico,titre,nbr_rep,nbr_vu,auteur,dernier,dernierp  
FROM sujet  
USE INDEX(dernier)  
WHERE cat='$cat'  
ORDER BY `dernier` DESC  
LIMIT $lim,$nspp



Poste le résultat d'un EXPLAIN sur ta requete et la structure de ta table sujet, ca permettra de parler sur quelque chose de plus solide :) Quelques pistes en vrac sinon : Que représente ton index "dernier" ? Le champ "cat" est-il indexé ? Tu utilises quelle version de MySQL ? Si c'est une 3.23, les classements par ordre décroissant ne sont pas optimisés, le ORDER DESC est déconseillé.
 
0.14 secondes ca reste correct, même si 10 000 sujets on est est vite avec un gros forum. Tu as quoi comme machine pour obtenir ce temps ? Sur les 0.14 secondes combien prend la requête seule (début du timer avant le mysql_query, fin juste après) ?

Reply

Marsh Posté le 10-06-2003 à 23:03:16    

Core 666 a écrit :


Poste le résultat d'un EXPLAIN sur ta requete et la structure de ta table sujet, ca permettra de parler sur quelque chose de plus solide :) Quelques pistes en vrac sinon : Que représente ton index "dernier" ? Le champ "cat" est-il indexé ? Tu utilises quelle version de MySQL ? Si c'est une 3.23, les classements par ordre décroissant ne sont pas optimisés, le ORDER DESC est déconseillé.
 
0.14 secondes ca reste correct, même si 10 000 sujets on est est vite avec un gros forum. Tu as quoi comme machine pour obtenir ce temps ? Sur les 0.14 secondes combien prend la requête seule (début du timer avant le mysql_query, fin juste après) ?


 
[newb mode on :d ]  
 
et il y a d'autres méthodes pour parvenir au même résultat ?
 
Ca représente quoi, d'indexer un champ ?

Reply

Marsh Posté le 10-06-2003 à 23:42:56    

HORNY-GRANDCORNU a écrit :


 
[newb mode on :d ]  
 
et il y a d'autres méthodes pour parvenir au même résultat ?
 
Ca représente quoi, d'indexer un champ ?

d'avoir un acces direct au nuplet que tu veux consulter
 
en gros le SGBD n'a pas a parcourir toutes les lignes pour trouver ton nuplet, mais y accede directement

Reply

Marsh Posté le 11-06-2003 à 10:03:49    

Core 666 a écrit :


Poste le résultat d'un EXPLAIN sur ta requete et la structure de ta table sujet, ca permettra de parler sur quelque chose de plus solide :) Quelques pistes en vrac sinon : Que représente ton index "dernier" ? Le champ "cat" est-il indexé ? Tu utilises quelle version de MySQL ? Si c'est une 3.23, les classements par ordre décroissant ne sont pas optimisés, le ORDER DESC est déconseillé.
 
0.14 secondes ca reste correct, même si 10 000 sujets on est est vite avec un gros forum. Tu as quoi comme machine pour obtenir ce temps ? Sur les 0.14 secondes combien prend la requête seule (début du timer avant le mysql_query, fin juste après) ?


Pas de chance pour moi c'est une 3.23... :(
 


EXPLAIN SELECT id,ico,titre,nbr_rep,nbr_vu,auteur,dernier,dernierp FROM sujet USE INDEX(dernier) WHERE cat='1' ORDER BY `dernier` DESC LIMIT 0,20
 
table type   possible_keys key     key_len ref  row   extra
sujet index  cat           dernier 8       NULL 10014 whre used

 
cat est indexé, et dernier c'est la date
 
le tout sur duron 850 400mo de ram


Message édité par j-'-r le 11-06-2003 à 10:19:11
Reply

Marsh Posté le 11-06-2003 à 10:14:43    

requete seule avec sa boucle while associée 0.03 sec ( page en 0.07 )

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed