[ PHP / MySQL ] j'ai 20 000 enregistrements et ca rame...

j'ai 20 000 enregistrements et ca rame... [ PHP / MySQL ] - PHP - Programmation

Marsh Posté le 27-07-2002 à 16:01:06    

comment faire dans un forum pour gerer 20 000 sujets sans que ca rame ?
 
y a un "truc" avec les index, mais je ne sais pas comment ca marche...
 
 
HELP
 
http://gigigan.homeip.net/jjndforu [...] =suj&cat=1
0.4 s
http://gigigan.homeip.net/jjndforu [...] =1&suj=134
1.2 s :(

Reply

Marsh Posté le 27-07-2002 à 16:01:06   

Reply

Marsh Posté le 27-07-2002 à 16:02:31    

si c'est bien codé, tu dois avoir autant de requete que tu aie 1 ou 20 000 sujets


---------------
༼ つ ◕_◕ ༽つ
Reply

Marsh Posté le 27-07-2002 à 16:25:08    

c'est le cas, je crois que c'est plus une question d'index et autre sous mysql

Reply

Marsh Posté le 27-07-2002 à 18:59:57    

yup ? :bounce:

Reply

Marsh Posté le 27-07-2002 à 20:08:05    

THE REAL SMILEY a écrit a écrit :

si c'est bien codé, tu dois avoir autant de requete que tu aie 1 ou 20 000 sujets




 
Ben ca y a une requete pour afficher les topics ...
Si c 1 ou 1 000 000 d'enregistrements, je vois pas pk y aurait plusieurs requetes  :??:


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
Reply

Marsh Posté le 27-07-2002 à 20:47:15    

Sans source c'est dûr...

Reply

Marsh Posté le 27-07-2002 à 22:11:17    

dsl de polluer le topic mais sous mozilla ça ne lmarche pas très bien ton code javascript ;)
 
edit : un peu comme ici mais en pire :(


Message édité par CorranHorn le 27-07-2002 à 22:11:35

---------------
A suivre
Reply

Marsh Posté le 28-07-2002 à 00:17:02    

CorranHorn a écrit a écrit :

dsl de polluer le topic mais sous mozilla ça ne lmarche pas très bien ton code javascript ;)
 
edit : un peu comme ici mais en pire :(  




si si :) le sujet a juste ete deleté => rien apparait niveau messages mais le top et le bottom si :D
 
c est bien ca ?

Reply

Marsh Posté le 28-07-2002 à 00:24:13    

ben tu crées des index sur les champs qui font souvent l'objet de recherches

Reply

Marsh Posté le 28-07-2002 à 09:59:03    

HappyHarry a écrit a écrit :

ben tu crées des index sur les champs qui font souvent l'objet de recherches




meme come ca ca rame encore :(
 
comme ce forum fait pour rester dans ces temps la avec tant de messages ?

Reply

Marsh Posté le 28-07-2002 à 09:59:03   

Reply

Marsh Posté le 28-07-2002 à 10:07:29    

J-'-R a écrit a écrit :

 
meme come ca ca rame encore :(
 
comme ce forum fait pour rester dans ces temps la avec tant de messages ?



Moi j'ai 0.0042 pour le premier lien.


Message édité par CorranHorn le 28-07-2002 à 10:07:42

---------------
A suivre
Reply

Marsh Posté le 28-07-2002 à 18:51:56    

Que donne un EXPLAIN sur la requête qui liste tes sujets ?

Reply

Marsh Posté le 28-07-2002 à 21:31:59    

table  type  possible_keys  key  key_len  ref  rows  Extra  
sujets1   ALL   cat            34   where used; Using filesort  


Message édité par j-'-r le 28-07-2002 à 21:33:57
Reply

Marsh Posté le 29-07-2002 à 00:36:47    

Et avec seulement 34 enregistrements parcourus ca rame :??:
 
Je suppose que tu as un LIMIT quelque part dans ta requête. Tu as constaté des temps de génération élevé pour un LIMIT 0,35 ? Ou juste pour un LIMIT x, 35, où x représente l'une des dernières pages de ton forum ?

Reply

Marsh Posté le 29-07-2002 à 09:36:41    

j'ai fait un dellete, au debut un il y avait 20 024 enregistrments, et la ca ramais...
 
j ai un limit mais ca rame pour toutes les pages pareilles :(


Message édité par j-'-r le 29-07-2002 à 09:37:26
Reply

Marsh Posté le 29-07-2002 à 09:39:22    

Difficile de te venir en aide sans plus de précisions.
 
Avec la structure de la table et la requête MySQL ce serait beaucoup plus simple. A moins que tu ne veuilles garder tes sources confidentielles ? ;)

Reply

Marsh Posté le 29-07-2002 à 10:11:22    

CREATE TABLE sujets1 (
  s_id mediumint(9) NOT NULL auto_increment,
  sujet mediumint(9) NOT NULL default '0',
  titre tinytext NOT NULL,
  nom tinytext NOT NULL,
  dateheure datetime NOT NULL default '0000-00-00 00:00:00',
  date date NOT NULL default '0000-00-00',
  heure time NOT NULL default '00:00:00',
  divers mediumint(9) NOT NULL default '0',
  nommod tinytext NOT NULL,
  ferme tinyint(4) default NULL,
  cat tinyint(4) default NULL,
  vu mediumint(9) NOT NULL default '0',
  sond mediumtext NOT NULL,
  avote text NOT NULL,
  PRIMARY KEY  (s_id),
  KEY cat (cat),
  KEY s_id (s_id),
  KEY date (date),
  KEY heure (heure)
) TYPE=MyISAM;


 

SELECT * FROM sujets1 USE INDEX(date,heure) WHERE cat='1'order by date DESC, heure DESC  limit 0,20


 
j'ai remplacé les var de la requetes par leur premieres valeur :D ( page 1 )
 
si tu peux toujours m aider :D

Reply

Marsh Posté le 29-07-2002 à 10:12:11    

je sais bien qu il y a un dateheure et un date et un heure
mis le date et le heure sont sensé bientot disparaitre au profil du dateheure ( on m a conseillé ca :D )

Reply

Marsh Posté le 29-07-2002 à 10:15:06    

Citation :


Note that in some cases MySQL will not use an index, even if one would be available. Some of the cases where this happens are:  
 

  • If the use of the index would require MySQL to access more than 30% of the rows in the table. (In this case a table scan is probably much faster, as this will require us to do much fewer seeks.) Note that if such a query uses LIMIT to only retrieve part of the rows, MySQL will use an index anyway, as it can much more quickly find the few rows to return in the result.  
  • If the index range may contain NULL values and you are using ORDER BY ... DESC



Reply

Marsh Posté le 29-07-2002 à 10:20:42    

Déjà, il y a un gros soucis avec ta requête. En utilisant un ORDER BY DESC, les index ne te sont d'aucune utilité. Une solution pourrait consister à stocker la date de tes messages sous forme de TIMESTAMP inversé (0-TIMESTAMP) afin de faire un ORDER BY ASC. C'est pas super élégant, mais ca marche ...
 
Parce qu'en l'état actuel des choses, si tu as 20.000 sujets dans ta table, c'est 20.000 enregistrements qui sont parcourus à chaque requête, même si c'est pour n'en retourner que 20. Inutile de dire que le classement par date, puis par heure ne fait qu'empirer les choses, mais bon, ca tu vas le corriger :)


Message édité par Core 666 le 29-07-2002 à 10:51:33
Reply

Marsh Posté le 29-07-2002 à 10:25:18    

Autre chose : tu devrais optimiser le type de tes champs. L'impact sur les performances n'est pas énorme, mais c'est toujours ca de prit :) Commence par remplacer les champs mediumint(9) par des mediumint(8) de type UNSIGNED.
 
Le champ ferme se contentera à merveille d'un tinyint(1). Autre chose : tu gagneras en perfs en dissociant tout ce qui concerne les sondages dans une autre table. Laisse juste un champ sondage de type tinyint(1) qui prendra les valeurs 0 ou 1. C'est d'autant plus vrai que tu stockes visiblement la liste des votants dans un champ de type text. Il serait plus intéressant de créer une nouvele table composée de 3 champ (une clefprimaire, une clef s_id et une clef membre_id).

Reply

Marsh Posté le 29-07-2002 à 15:19:36    

Core 666 a écrit a écrit :

En utilisant un ORDER BY DESC, les index ne te sont d'aucune utilité.



Es-tu sûr de ce que tu dis ? Parce que là ça m'intrigue. Dans le post au dessus je vois que c'est seulement quand il y a des champs pouvant être NULL que ce n'est pas utilisé, or les champs de J'R sont NOT NULL.


Message édité par Dost67 le 29-07-2002 à 15:19:53
Reply

Marsh Posté le 29-07-2002 à 16:06:16    

Dost67 a écrit a écrit :

 
Es-tu sûr de ce que tu dis ? Parce que là ça m'intrigue. Dans le post au dessus je vois que c'est seulement quand il y a des champs pouvant être NULL que ce n'est pas utilisé, or les champs de J'R sont NOT NULL.




 
Ou lorsque l'index s'applique sur plus de 30% des enregistrements;)

Reply

Marsh Posté le 29-07-2002 à 23:08:43    

tes key sur date et heure -> un seul message par jour et un seul message par heure !!
 
 
fait gaffe a tes clefs !!
CA CHIE !

Reply

Marsh Posté le 29-07-2002 à 23:16:32    

si qq1 a l equivalent de nexen.net pour mysql ( sachant que nexen le fait mais ca marche pas chez moi :( )

Reply

Marsh Posté le 06-08-2002 à 16:10:31    

Citation :


tes key sur date et heure -> un seul message par jour et un seul message par heure !!  
 
 
fait gaffe a tes clefs !!  
CA CHIE !


 
Les clés sont bonnes. Pas forcement utiles, mais bonnes!!! Elles n'ont pas de contrainte d'unicité. Les doublons sont donc acceptés.
 
Sinon pour ce qui est de l'order by, celui-ci n'affecte pas les index, puisqu'il n'est traité qu'apres selection des enregistrements conformes à la clause WHERE. Le tri s'effectue sur le resultat, mais necessite de créer une table de travail, ce qui augmente enormement le temps de traitement.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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