Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3849 connectés 

 


 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  285  286  287  ..  486  487  488  489  490  491
Auteur Sujet :

les développeurs de forums, les 3/4 des forums sont down /o\

n°1173501
Limit
Posté le 09-08-2005 à 17:57:53  profilanswer
 

Reprise du message précédent :

Max Evans a écrit :

T'es sûr de ça ? :??:
Le fait est que j'ai gagné 0.5s sur une page grace à ca :D


Pourquoi tu as besoin de ca alors qu'en page index tu affiches le nombre de sujets dans chaque forum?

mood
Publicité
Posté le 09-08-2005 à 17:57:53  profilanswer
 

n°1173507
Max Evans
Posté le 09-08-2005 à 18:00:39  profilanswer
 

Limit a écrit :

Pourquoi tu as besoin de ca alors qu'en page index tu affiches le nombre de sujets dans chaque forum?


Je répète, je m'en sers pour calculer le nombre de pages quand tu listes les flags dans une catégorie :D


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°1173508
Limit
Posté le 09-08-2005 à 18:01:39  profilanswer
 

Max Evans a écrit :

Je répète, je m'en sers pour calculer le nombre de pages quand tu listes les flags dans une catégorie :D


k je me disais :D

n°1173511
cinocks
Posté le 09-08-2005 à 18:03:53  profilanswer
 

Max Evans a écrit :

T'es sûr de ça ? :??:
Le fait est que j'ai gagné 0.5s sur une page grace à ca :D


 
Sur oui, prends la premiere requete seule et calcule. Tu verras son temps d'execution, singulierement proche d'un count.
 
Sinon gagner 0.5s, c'est enorme tout de meme. Il n'y pas un autre pb de conception?


---------------
MZP est de retour
n°1173542
drasche
Posté le 09-08-2005 à 19:07:39  profilanswer
 

Ici j'ai un index composé de deux champs dont fldtopcaidn:
 

Code :
  1. (783.14) SELECT SQL_NO_CACHE SQL_CALC_FOUND_ROWS fldmesgaidn FROM tblmesg_20 WHERE fldtopcaidn=1;
  2. (0.13) SELECT FOUND_ROWS();
  3. (40.40) SELECT SQL_NO_CACHE COUNT(*) FROM tblmesg_20 WHERE fldtopcaidn=1;


 
Second essai avec un index sur le seul champ fldtopcaidn:
 

Code :
  1. (779.65) SELECT SQL_NO_CACHE SQL_CALC_FOUND_ROWS fldmesgaidn FROM tblmesg_20 WHERE fldtopcaidn=1;
  2. (0.14) SELECT FOUND_ROWS();
  3. (37.49) SELECT SQL_NO_CACHE COUNT(*) FROM tblmesg_20 WHERE fldtopcaidn=1;


 
Ici, je traitais 120.000 enregistrements sur un total de 1.091.813, et cet ensemble de requêtes a été lancé 100x.


Message édité par drasche le 09-08-2005 à 19:08:27

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1173544
drasche
Posté le 09-08-2005 à 19:07:57  profilanswer
 

Max Evans a écrit :

T'es sûr de ça ? :??:
Le fait est que j'ai gagné 0.5s sur une page grace à ca :D


C'est même certain.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1173558
Max Evans
Posté le 09-08-2005 à 19:30:23  profilanswer
 

Chelou [:mlc]
 
Le COUNT(*) seul est plus performant donc :/
 
Autre test :
Essayes de chopper un champ genre :
 
SELECT SQL_NO_CACHE COUNT(*) as total, un_autre_champ FROM tblmesg_20 WHERE fldtopcaidn=1 GROUP BY je_sais_pas_quoi;
 
Ptete qu'en définitive, le FOUND_ROWS est plus performant sur ce genre de requêtes :??:
 
Pourtant, je mettrais ma main à couper que chez moi ça a grave boosté les choses (Benchs à l'appui à l'époque, j'ai pas déliré :D)


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°1173563
belgique
Posté le 09-08-2005 à 19:51:45  profilanswer
 

C'est évident que le COUNT(*) est plus rapide qu'aller chercher les enregistrement et puis regarder combien de résultats on avait.

n°1173567
drasche
Posté le 09-08-2005 à 20:13:02  profilanswer
 

C'est ce que je me tue à lui dire :D
 
Ya quand même une sacrée différence pour MySQL à recueillir UNE info avec un COUNT, plutôt que 200000* le nombre de champs (et il faut encore balancer l'info à PHP pour qu'il la traite)
 
Ya absolument rien de bizarre là-dedans :)


Message édité par drasche le 09-08-2005 à 20:13:29

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1173576
Max Evans
Posté le 09-08-2005 à 20:47:24  profilanswer
 

belgique a écrit :

C'est évident que le COUNT(*) est plus rapide qu'aller chercher les enregistrement et puis regarder combien de résultats on avait.


C'est pas si évident que ça non :o
Ton COUNT parse entièrement la table aussi [:spamafote]


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
mood
Publicité
Posté le 09-08-2005 à 20:47:24  profilanswer
 

n°1173577
Max Evans
Posté le 09-08-2005 à 20:50:07  profilanswer
 

C'est comme un SELECT truc FROM table WHERE champ=1 RODER BY id ASC LIMIT 0,10.
 
Si ta table fait 1 000 000 d'enregistrements, ta requête mettra plus de deux secondes à s'effectuer [:spamafote]
 
C'est pas si évident que ça non plus vu qu'il ne récupère que 10 enregistrements :D


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°1173578
Max Evans
Posté le 09-08-2005 à 20:50:19  profilanswer
 

Donc rien n'est évident avec MySQL [:ddr555]


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°1173579
drasche
Posté le 09-08-2005 à 20:52:22  profilanswer
 

Max Evans a écrit :

C'est pas si évident que ça non :o
Ton COUNT parse entièrement la table aussi [:spamafote]


Il y a une différence entre parser une table et extraire l'info d'une table. Recompte voir combien tu ramènes d'informations quand tu fais ta requête ;)
 
Un COUNT, ça ramène UN row dans UN champ calculé. Toi tu en ramènes 200.000 multiplié par le nombre de champs. C'est énorme comme différence. Et tout cela doit être traité par MySQL, par PHP, ce qui suppose que l'information en question transite entre les deux logiciels.
 
Je ne vois pas comment faire plus clair :??:


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1173580
drasche
Posté le 09-08-2005 à 20:53:21  profilanswer
 

Max Evans a écrit :

C'est comme un SELECT truc FROM table WHERE champ=1 RODER BY id ASC LIMIT 0,10.
 
Si ta table fait 1 000 000 d'enregistrements, ta requête mettra plus de deux secondes à s'effectuer [:spamafote]
 
C'est pas si évident que ça non plus vu qu'il ne récupère que 10 enregistrements :D


Erreur, formulée comme ça, la requête va parser les 10 premiers enregistrements qui correspondent à la condition champ=1. Il s'arrêtera ensuite parce que le LIMIT est présent.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1173582
Max Evans
Posté le 09-08-2005 à 20:54:21  profilanswer
 

T'es sûr de rapporter les 200 000 enregistrements ? Avec un mysql_fetch_array oui, mais sans ? :??:


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°1173583
Max Evans
Posté le 09-08-2005 à 20:55:10  profilanswer
 

drasche a écrit :

Erreur, formulée comme ça, la requête va parser les 10 premiers enregistrements qui correspondent à la condition champ=1. Il s'arrêtera ensuite parce que le LIMIT est présent.


Erreur :D Il va te trier TOUTE la table par champ=1 puis id ASC, et ensuite te sortir 10 enregistrements :D
 
Quand je te dis que rien n'est évident [:ddr555]
 
Mais bon, t'as raison sur le COUNT :o :D


Message édité par Max Evans le 09-08-2005 à 20:56:01

---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°1173584
cinocks
Posté le 09-08-2005 à 20:56:51  profilanswer
 

s'il est placé sur un index, il ne parse que l'index, et surtout ne stocke pas de pages resultat. Ca prend moins de place et demande forcement moins de travail.


---------------
MZP est de retour
n°1173601
drasche
Posté le 09-08-2005 à 21:34:02  profilanswer
 

Max Evans a écrit :

Erreur :D Il va te trier TOUTE la table par champ=1 puis id ASC, et ensuite te sortir 10 enregistrements :D
 
Quand je te dis que rien n'est évident [:ddr555]
 
Mais bon, t'as raison sur le COUNT :o :D


Erreur encore une fois :o (mais bon j'admets la mienne :o)
 
il trie sur id, puis il prend les 10 premiers qu'il trouve :p


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1173676
e-deby
Posté le 10-08-2005 à 08:54:41  profilanswer
 

drasche a écrit :

Il y a une différence entre parser une table et extraire l'info d'une table. Recompte voir combien tu ramènes d'informations quand tu fais ta requête ;)
 
Un COUNT, ça ramène UN row dans UN champ calculé. Toi tu en ramènes 200.000 multiplié par le nombre de champs. C'est énorme comme différence. Et tout cela doit être traité par MySQL, par PHP, ce qui suppose que l'information en question transite entre les deux logiciels.
 
Je ne vois pas comment faire plus clair :??:


 
euh, tant que tu ne demandes pas explicitement à y accéder l'info ne transite nulle part hein :D


---------------
Pour les sudistes :)
n°1173679
drasche
Posté le 10-08-2005 à 09:02:13  profilanswer
 

ben l'info est retournée par le COUNT, je ne vois vraiment pas le problème :o
edit: oui je vois ce que tu veux dire mais vu qu'il la demande, MySQL doit bien l'entreposer quelque part et ça bouffe de la ressource :o


Message édité par drasche le 10-08-2005 à 09:04:19

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1173719
cinocks
Posté le 10-08-2005 à 10:10:37  profilanswer
 

drasche a écrit :

ben l'info est retournée par le COUNT, je ne vois vraiment pas le problème :o
edit: oui je vois ce que tu veux dire mais vu qu'il la demande, MySQL doit bien l'entreposer quelque part et ça bouffe de la ressource :o


 
Tout à fait ce doit etre stocké coté MySQL en Memoire. Ca consomme de la ressource.


---------------
MZP est de retour
n°1173916
Max Evans
Posté le 10-08-2005 à 14:47:55  profilanswer
 

drasche a écrit :

Erreur encore une fois :o (mais bon j'admets la mienne :o)
 
il trie sur id, puis il prend les 10 premiers qu'il trouve :p


Bah justement ^^ S'il trouve 999 999 enregistrements (champ=1) et qu'il te les trie, tu tues ton serveur sur place :D
C'est seulement après avoir trié les 999 999 enregistrements qu'il va te prendre les 10 premiers :D


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°1173918
drasche
Posté le 10-08-2005 à 14:52:26  profilanswer
 

Max Evans a écrit :

Bah justement ^^ S'il trouve 999 999 enregistrements (champ=1) et qu'il te les trie, tu tues ton serveur sur place :D
C'est seulement après avoir trié les 999 999 enregistrements qu'il va te prendre les 10 premiers :D


Et c'est ce que tu fais avec ta requête ;)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1173924
Max Evans
Posté le 10-08-2005 à 15:01:17  profilanswer
 

drasche a écrit :

Et c'est ce que tu fais avec ta requête ;)


Vi vi, c'était juste pour donner un exemple pas évident du tout ;)
 
A l'époque j'avais posé moultes questions à ce propos sur de nombreux forums (HFR, DVPEZ.COM, PHPFRANCE, etc), et personne n'a été foutu de me répondre :D
 
C'est d'ailleurs pour ça que, sans tips, si un sujet de forum compte genre 250 000 réponses, je ne te raconte pas comment tu mets le serveur à genoux si tu fais un ORDER BY + LIMIT :(


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°1173929
cinocks
Posté le 10-08-2005 à 15:08:44  profilanswer
 

Max Evans a écrit :

Vi vi, c'était juste pour donner un exemple pas évident du tout ;)
 
A l'époque j'avais posé moultes questions à ce propos sur de nombreux forums (HFR, DVPEZ.COM, PHPFRANCE, etc), et personne n'a été foutu de me répondre :D
 
C'est d'ailleurs pour ça que, sans tips, si un sujet de forum compte genre 250 000 réponses, je ne te raconte pas comment tu mets le serveur à genoux si tu fais un ORDER BY + LIMIT :(


 
PAs de raison de faire un order by pour des messages, puisqu'ils arrivent les uns derrieres les autres. Et le limit est à eviter sur du gros volume.


---------------
MZP est de retour
n°1173932
Max Evans
Posté le 10-08-2005 à 15:10:07  profilanswer
 

cinocks a écrit :

PAs de raison de faire un order by pour des messages, puisqu'ils arrivent les uns derrieres les autres. Et le limit est à eviter sur du gros volume.


Heu :D Suffit que tu supprimes un message au milieu, et lors du prochain post inséré, il sera inséré physiquement dans le trou ... Et là, adieu la continuité de tes messages :D


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°1173933
cinocks
Posté le 10-08-2005 à 15:12:18  profilanswer
 

Euh, j'vois pas le rapport. Les messages restent ordonnés. Meme s'ils ne le sont pas physiquement, ils le sont logiquement.


Message édité par cinocks le 10-08-2005 à 15:12:41

---------------
MZP est de retour
n°1173937
Max Evans
Posté le 10-08-2005 à 15:16:04  profilanswer
 

Pas du tout [:spamafote]
 
Si tu as des messages :
 
ID 1
ID 2
ID 3
ID 4
 
Tu fais un SELECT * FROM table WHERE id_topic = 1 par exemple, ca te ressortira : ID1 > ID2 > ID3 > ID4
 
Maintenant, si tu supprimes ID3, et que tu rajoutes un nouveau message, tu auras :
 
ID 1
ID 2
ID 5
ID 4
 
Et là, bye bye la continuité de tes ID :D D'où la nécessité du ORDER BY ID ASC


Message édité par Max Evans le 10-08-2005 à 15:16:49

---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°1173944
cinocks
Posté le 10-08-2005 à 15:23:31  profilanswer
 

bah oui, mais ton index sera dans ta clé primaire je l'espere, auquel cas, tes enregistrements seront dans l'ordre. Sans index, je suis daccord sur ton raisonnement ;)


---------------
MZP est de retour
n°1173950
Max Evans
Posté le 10-08-2005 à 15:25:34  profilanswer
 

L'index réagit de la même facon :??: C'est juste que c'est un fichier physique indépendant (Bien qu'ayant des liens avec les autres :D) ... Donc normalement, si t'as un trou dans ton index, c'est pareil :(
 
Ceci dit, un ALTER TABLE règle ce problème, mais sur des grosses tables, ce n'est pas gérable toutes les 30s :D


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°1173951
drasche
Posté le 10-08-2005 à 15:26:05  profilanswer
 

Non, en MySQL, la clé primaire n'intervient pas si tu fais un SELECT sans spécifier d'ORDER BY. MySQL sort les champs strictement dans l'ordre où ils se trouvent dans le fichier.


Message édité par drasche le 10-08-2005 à 15:26:39

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1173956
cinocks
Posté le 10-08-2005 à 15:33:20  profilanswer
 

Max Evans a écrit :

L'index réagit de la même facon :??: C'est juste que c'est un fichier physique indépendant (Bien qu'ayant des liens avec les autres :D) ... Donc normalement, si t'as un trou dans ton index, c'est pareil :(
 
Ceci dit, un ALTER TABLE règle ce problème, mais sur des grosses tables, ce n'est pas gérable toutes les 30s :D


 
Non MySQL comme tout moteur utilise le B-tree pour ses index (le plus souvent). Le fonctionnement meme d'un B-tree interdit les données de l'index desordonné. Donc si le champ figure dans l'index tu ne pourras pas avec 1,2,5,4. Fais le meme essai avec un index, ce sera suffisant comme preuve. ;)


---------------
MZP est de retour
n°1173957
Max Evans
Posté le 10-08-2005 à 15:33:35  profilanswer
 

drasche a écrit :

Non, en MySQL, la clé primaire n'intervient pas si tu fais un SELECT sans spécifier d'ORDER BY. MySQL sort les champs strictement dans l'ordre où ils se trouvent dans le fichier.


Ma biche, ca roxxe, on est d'accord ? :eek: :D


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°1173967
Max Evans
Posté le 10-08-2005 à 15:36:31  profilanswer
 

cinocks a écrit :

Non MySQL comme tout moteur utilise le B-tree pour ses index (le plus souvent). Le fonctionnement meme d'un B-tree interdit les données de l'index desordonné. Donc si le champ figure dans l'index tu ne pourras pas avec 1,2,5,4. Fais le meme essai avec un index, ce sera suffisant comme preuve. ;)


Hum, t'as ptete raison en définitive :D J'avais aller voir ça :D


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°1173970
cinocks
Posté le 10-08-2005 à 15:37:24  profilanswer
 

Faites juste le test. Je viens de creer une table avec un champ char(10), et un index dessus. J'insere 4 enregistrements: "01", "02", "03", "04". Un premier select sans condition me les retourne dans cet ordre. Je supprime le "03", et j'insere le "05". De nouveau un SELECT * FROM matable, et resultat "01", "02", "03", "05"


---------------
MZP est de retour
n°1173971
cinocks
Posté le 10-08-2005 à 15:37:57  profilanswer
 

Max Evans a écrit :

Hum, t'as ptete raison en définitive :D J'avais aller voir ça :D


 
tu remettrais en cause 7 ans d'usage de base de données :o


---------------
MZP est de retour
n°1173973
Max Evans
Posté le 10-08-2005 à 15:40:51  profilanswer
 

Je m'incline, j'ai fais le test avec et sans index :D


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°1173975
Max Evans
Posté le 10-08-2005 à 15:42:17  profilanswer
 

Mais alors, une petite question :
 
Je ne peux pas faire :
 
SELECT mes_champs FROM message WHERE id_topic = 1 par exemple ? Mon id_topic est bien un INDEX, mais les messages n'arrivent pas dans l'ordre des topics ...
 
Tu vois ce que je veux dire ? :D


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°1173981
cinocks
Posté le 10-08-2005 à 15:43:55  profilanswer
 

j'ai eu un gros doute tout de meme avec les clustered. Je me suis renseigné aupres des dba. Donc pour info, l'index clustered retournera le meme resultat que l'index simple. Mais aura en plus le bienfait d'ordonner physiquement les enregistrements. D'ou un tres gros gain de temps dans le chargement des pages memoire. Mais ca n'existe pas sous MySQL.


---------------
MZP est de retour
n°1173984
drasche
Posté le 10-08-2005 à 15:45:33  profilanswer
 

ben merde, j'y comprends plus rien [:yoko54]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1173987
cinocks
Posté le 10-08-2005 à 15:49:50  profilanswer
 

Max Evans a écrit :

Mais alors, une petite question :
 
Je ne peux pas faire :
 
SELECT mes_champs FROM message WHERE id_topic = 1 par exemple ? Mon id_topic est bien un INDEX, mais les messages n'arrivent pas dans l'ordre des topics ...
 
Tu vois ce que je veux dire ? :D


 
Meme resultat que s'il n'y avait pas d'index.


---------------
MZP est de retour
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  285  286  287  ..  486  487  488  489  490  491

Aller à :
Ajouter une réponse
 

Sujets relatifs
question avec les forums phpbb2[php] trouver la premier place ou inserer un enregistrement (résolu)
Forums phpBBQui connait l'algo du Passticket et sa mise en place en VB ?
[Merise] Mise en place d'un MCDFocus mal placé....
[Blabla/Prog] Les développeurs foromeurs sont-ils des feignasses?Mise en place d'un formulaire CGI
forums création de site internetJava - Mise en place d'une api (Servlet)
Plus de sujets relatifs à : les développeurs de forums, les 3/4 des forums sont down /o\


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)