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

 


 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  366  367  368  ..  486  487  488  489  490  491
Auteur Sujet :

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

n°1366037
xman
branleur
Posté le 14-05-2006 à 21:25:16  profilanswer
 

Reprise du message précédent :
ben tu l'as très bien expliqué pour les messages dans un topic (je l'ai implémenté aujourd'hui et ça marche même si, comme je l'ai dit, je n'ai pas encore pu vraiment quantifier les effets bénéfiques) mais j'ai pas le souvenir de l'avoir lu pour les topics dans une section du forum.
Mais c'est pas grave, je vais me creuser un peu la tête pour trouver une solution (si je retrouve pas). :o


Message édité par xman le 14-05-2006 à 21:26:49
mood
Publicité
Posté le 14-05-2006 à 21:25:16  profilanswer
 

n°1366038
anthomicro
Posté le 14-05-2006 à 21:28:37  profilanswer
 

pour les topics c'est la même chose ;)

n°1366040
0x90
Posté le 14-05-2006 à 21:38:58  profilanswer
 

joce a écrit :

sauf que si tu fais un mass delete, t'auras des pages vides :D


 
Rha mais si même toi tu lis pas ... il n'y aura pas des pages vides :o

n°1366046
xman
branleur
Posté le 14-05-2006 à 21:57:20  profilanswer
 

anthomicro a écrit :

pour les topics c'est la même chose ;)


 
Bon alors résumons...
 
- Quand on poste un message dans un topic, on lui donne comme numéro, le nb de messages déjà dans le topic +1.
- Quand on supprime un message dans un topic, on décrémente le numéro de tous les messages suivants dans ce topic.
- Et donc quand on veut récupérer une poignée de messages de ce topic, on prend ceux dont le numéro est "between" les topics qu'on veut afficher.
=> Ca c'est très simple, y'a pas de problème.
 
Maintenant pour les topics dans une section... Si l'on utilise la même méthode...
- Quand on crée un nouveau topic, on lui donne un numéro qui est comme pour les messages le nb de topics dans cette section + 1 (on les affichera en ordre descendant)
- Quand on supprime un topic, on décrémente le numéro d'ordre des topics d'ordre supérieur.
=> Jusqu'ici c'est pareil : un traitement simple fait fréquemment + un traitement potentiellement lourd fait parfois.
SAUF QUE...
Lorsqu'on poste un message dans un topic (traitement très fréquent), il faut réordonner tous les topics d'ordre supérieur en décrémentant leur ordre puis donner le nb de topics comme ordre au topic dans lequel on a posté.
=> Et là, c'est un traitement lourd (surtout si l'on fait remonter des vieux topics ; mais heureusement, c'est plus rare) fait très souvent et je sais pas si on gagne tant que ça par rapport au tri (qui est lui aussi un traitement lourd mais qui ne fait pas d'écriture dans la BD (très lourd))...
Mais bon, je vais vous faire confiance, vous qui avez des BD archi-remplies donc je vais suivre cette solution...

Message cité 1 fois
Message édité par xman le 14-05-2006 à 22:08:49
n°1366052
Puissance ​Athlon XP
Posté le 14-05-2006 à 22:10:52  profilanswer
 

xman a écrit :

Mais bon, je vais vous faire confiance, vous qui avez des BD archi-remplies donc je vais suivre cette solution...


 
C'est pas parce que qui que ce soit dit quelque chose que c'est forcément la vérité vraie, hein :o
 
Perso je te déconseille, surtout que bon, je vois pas trop comment il peut gerer l'affichage par catégories/sous categories à moins de tenir un compteur séparé
La solution elle est relativement valable sur les topics, mais pas dans les index de cats, enfin c'est mon avis, se tapper un UPDATE de 15 topics à chaque post, ça me parait un peu exageré :o

n°1366056
anthomicro
Posté le 14-05-2006 à 22:18:42  profilanswer
 

Pour les sous cat un champ en plus ouais, bah ça reste toujours plus rapide qu'un LIMIT ;)
 
Ma solution est une solution, je n'ai jamais affirmé que c'était LA solution :)
 
Donc si vous trouvez mieux, n'hésitez pas à en parler ici :)

n°1366057
xman
branleur
Posté le 14-05-2006 à 22:18:56  profilanswer
 

J'attendrai en effet d'autres avis avant de me lancer dans cette "optimisation". :D
Et puis j'ai encore plein d'autres trucs à faire donc ça n'urge pas.

n°1366058
Puissance ​Athlon XP
Posté le 14-05-2006 à 22:23:09  profilanswer
 

anthomicro a écrit :

Pour les sous cat un champ en plus ouais, bah ça reste toujours plus rapide qu'un LIMIT ;)


 
J'ai pas dit le contraire, mais il doit surement y avoir moins lourd [:spamafote]  
 

anthomicro a écrit :

Ma solution est une solution, je n'ai jamais affirmé que c'était LA solution :)


 
C'est xman qui avait l'air de la prendre comme LA solution, pas toi :o

n°1366062
xman
branleur
Posté le 14-05-2006 à 22:29:42  profilanswer
 

Ben il disait "Beurk !" avec tant d'assurance... :whistle:

n°1366063
Harkonnen
Un modo pour les bannir tous
Posté le 14-05-2006 à 22:33:12  profilanswer
 

dis moi Athlon XP, je viens d'installer HFR Enhance 2 et j'ai cette erreur, c'est normal ? [:petrus dei]
 
http://img378.imageshack.us/img378/1417/hfr26nd.png


---------------
J'ai un string dans l'array (Paris Hilton)
mood
Publicité
Posté le 14-05-2006 à 22:33:12  profilanswer
 

n°1366066
0x90
Posté le 14-05-2006 à 22:34:31  profilanswer
 

Euh, c'est moi ou c'est le point d'exclamation de gnome ca ?

n°1366070
Puissance ​Athlon XP
Posté le 14-05-2006 à 22:44:27  profilanswer
 

Harkonnen a écrit :

dis moi Athlon XP, je viens d'installer HFR Enhance 2 et j'ai cette erreur, c'est normal ? [:petrus dei]
 
http://img378.imageshack.us/img378/1417/hfr26nd.png


 
Oui, c'est parfaitement normal :o
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
T'as installé la v1 [:bernadette]

n°1366075
Harkonnen
Un modo pour les bannir tous
Posté le 14-05-2006 à 22:55:34  profilanswer
 

ah ben oui, bien vu [:petrus75]
faites comme si je n'avais rien dit


---------------
J'ai un string dans l'array (Paris Hilton)
n°1366076
xman
branleur
Posté le 14-05-2006 à 22:55:38  profilanswer
 

Tiens, je suis en train de lutter sur mon forum contre un "(:whistle:)" qui n'est pas interprété dans l'ordre idéal et je constate qu'ici c'est pareil. :o (même si je crois que je vais laisser couler et on n'aura qu'à mettre un espace avant la " )" si on voulait pas obtenir un ":)". ( :whistle: )
 
PS : j'ai bien une solution mais ça implique des trucs qui m'ennuient un peu alors je me tate...

Message cité 1 fois
Message édité par xman le 14-05-2006 à 22:58:58
n°1366080
soulmanto
Chat Noir replica
Posté le 14-05-2006 à 22:58:13  profilanswer
 

Pour l'interprétation des smilies, j'ai procédé du plus grand au plus petit (je parle du nombre de caractères dans le code du smilie). Ca évite pas mal d'erreurs d'affichage! ;)

n°1366082
anthomicro
Posté le 14-05-2006 à 23:00:17  profilanswer
 

je fais ça aussi dans les expressions régulières ;)

n°1366083
xman
branleur
Posté le 14-05-2006 à 23:00:32  profilanswer
 

C'est ce que je fais pour les codes de smileys qui en contiennent d'autres (genre pour :d et [:dawa] c'est [:dawa] qui est traité en premier).
Mais ça n'inclue pas ceux qui se chevauchent.


Message édité par xman le 14-05-2006 à 23:02:45
n°1366087
Puissance ​Athlon XP
Posté le 14-05-2006 à 23:02:34  profilanswer
 

xman a écrit :

Tiens, je suis en train de lutter sur mon forum contre un "(:whistle:)" qui n'est pas interprété dans l'ordre idéal et je constate qu'ici c'est pareil. :o (même si je crois que je vais laisser couler et on n'aura qu'à mettre un espace avant la " )" si on voulait pas obtenir un ":)". ( :whistle: )
 
PS : j'ai bien une solution mais ça implique des trucs qui m'ennuient un peu alors je me tate...


 
Utilise un truc style negative lookahead/lookbehind

n°1366090
xman
branleur
Posté le 14-05-2006 à 23:06:11  profilanswer
 

Puissance Athlon XP a écrit :

Utilise un truc style negative lookahead/lookbehind


Si je dois énumérer dans le lookbehind tous mes codes de smileys se terminant par ":" j'ai pas fini. :(
Même si j'envisage cette éventualité...
 
En fait, la solution à laquelle je pense est de traiter tout simplement ce smiley en dernier ; mais, dans la liste de smileys, comme c'est un smiley courant, j'aurais envie de l'afficher en premier.
Et si je dois rajouter un champ d'ordre de traitement des smileys différent de l'ordre d'affichage, ça va être chiant pour l'interface de l'admin pour rajouter des smileys...
Enfin bref... Y'a des solutions, faut juste que je trouve la moins chiante à utiliser puis à programmer.
 
EDIT : mais non, je suis con ! C'est déjà ce que je fais pour mes smileys imbriqués (les retrier dans un autre ordre que l'ordre d'affichage). Bref, j'ai rien dit, c'est comme si c'était réglé. :o

Message cité 1 fois
Message édité par xman le 14-05-2006 à 23:13:48
n°1366093
The-Shadow
T'as été voir dans ton profil?
Posté le 14-05-2006 à 23:10:59  profilanswer
 

Je veux pas faire mon vilain petit canard, mais le LIMIT, ce n'est peut-être pas la solution optimale, mais c'est une solution viable même si temporaire.
Quand je vois qu'ici j'arrive à la page 376, que ça met 0,691s et que pour aller sur ma page 471 du topic bonjour sur mon forum, je mets 0.386s, bon, voilà quoi.
Je trouve que vous vous prenez beaucoup la tête sur cette histoire de Limit, je sais, personnellement que je traine un poids avec ce limit, mais avant que mon forum ne nécessite de changer de méthode par son nombre grandissant de message, MySQL 6 sera sortie et aura surement optimiser ce genre d'opérations.
 
Enfin, bref, ce que je veux dire, c'est que si vous avez la solution viable, donnez là, mais vous perdez un temps monstre juste pour gagner quelques ms sur les topics à grande page (qui sont relativement rares quand même).
 
Je ne peux pas vous filer les sources de mon forum, par contre, je peux vous donner toutes la méthodologie et toutes mes requêtes SQL au cas par cas, alors si vous avez THE méthode, donnez là qu'on arrête de tourner autour du pot juste pour THE LIMIT. :D
 
Enfin, vous faites ce que vous voulez, après tout, ça entretiens le topic.

n°1366095
Puissance ​Athlon XP
Posté le 14-05-2006 à 23:12:38  profilanswer
 

xman a écrit :

Si je dois énumérer dans le lookbehind tous mes codes de smileys se terminant par ":" j'ai pas fini. :(
Même si j'envisage cette éventualité...
 
En fait, la solution à laquelle je pense est de traiter ce smiley en dernier mais dans la liste de smileys, comme c'est un smiley courant, j'aurais envie de l'afficher en premier.
Et si je dois rajouter un champ d'ordre de traitement des smileys différent de l'ordre d'affichage, ça va être chiant pour l'interface de l'admin pour rajouter des smileys...
Enfin bref... Y'a des solutions, faut juste que je trouve la moins chiante à utiliser puis à programmer.


 
Ben non, tu fais un lookahead sur le : blabla : en vérifiant que y'a pas de caractere imprimable derriere

n°1366099
soulmanto
Chat Noir replica
Posté le 14-05-2006 à 23:15:39  profilanswer
 

The-Shadow a écrit :

Je veux pas faire mon vilain petit canard, mais le LIMIT, ce n'est peut-être pas la solution optimale, mais c'est une solution viable même si temporaire.
Quand je vois qu'ici j'arrive à la page 376, que ça met 0,691s et que pour aller sur ma page 471 du topic bonjour sur mon forum, je mets 0.386s, bon, voilà quoi.
Je trouve que vous vous prenez beaucoup la tête sur cette histoire de Limit, je sais, personnellement que je traine un poids avec ce limit, mais avant que mon forum ne nécessite de changer de méthode par son nombre grandissant de message, MySQL 6 sera sortie et aura surement optimiser ce genre d'opérations.
 
Enfin, bref, ce que je veux dire, c'est que si vous avez la solution viable, donnez là, mais vous perdez un temps monstre juste pour gagner quelques ms sur les topics à grande page (qui sont relativement rares quand même).
 
Je ne peux pas vous filer les sources de mon forum, par contre, je peux vous donner toutes la méthodologie et toutes mes requêtes SQL au cas par cas, alors si vous avez THE méthode, donnez là qu'on arrête de tourner autour du pot juste pour THE LIMIT. :D
 
Enfin, vous faites ce que vous voulez, après tout, ça entretiens le topic.


 
Le LIMIT est une solution viable pour les petits forums. Dès que le nombre de messages devient grand, c'est un gouffre en ressources et les temps de requête s'allongent considérablement. :eek:

n°1366104
The-Shadow
T'as été voir dans ton profil?
Posté le 14-05-2006 à 23:24:15  profilanswer
 

soulmanto a écrit :

Le LIMIT est une solution viable pour les petits forums. Dès que le nombre de messages devient grand, c'est un gouffre en ressources et les temps de requête s'allongent considérablement. :eek:


C'est quoi grand ?
Si c'est HFR, combien sur ce topic peuvent prétendre atteindre un tel quota ? Non, parce qu'HFR, c'est ce qu'il y a de plus gros niveau national déjà. :D
Après, moi avec presque 310000 message, le LIMIT ne me fout pas tout en l'air non plus.
Bien sûr, je n'ai pas 2000 membres simultanée non plus. Mais mon serveur à base de Celeron est ridicule par rapport à HFR.
 
Mais il serait temps de penser aux vrais "nouveautés" d'un forum sur ce topic. Quand je vois que ma proposition de multivote s'est soldé en une page juste pour m'entendre dire que ce n'était pas terrible alors que ça fait un carton chez les utilisateurs. Je trouve dommage qu'on passe vite fait sur les trucs sympas et qu'on se prenne la tête 50 pages pour diviser le temps de génération du LIMIT.

Message cité 1 fois
Message édité par The-Shadow le 14-05-2006 à 23:25:02
n°1366106
fabien
Vive la super 5 !
Posté le 14-05-2006 à 23:26:17  profilanswer
 

The-Shadow a écrit :

Je veux pas faire mon vilain petit canard, mais le LIMIT, ce n'est peut-être pas la solution optimale, mais c'est une solution viable même si temporaire.
Quand je vois qu'ici j'arrive à la page 376, que ça met 0,691s et que pour aller sur ma page 471 du topic bonjour sur mon forum, je mets 0.386s, bon, voilà quoi.
Je trouve que vous vous prenez beaucoup la tête sur cette histoire de Limit, je sais, personnellement que je traine un poids avec ce limit, mais avant que mon forum ne nécessite de changer de méthode par son nombre grandissant de message, MySQL 6 sera sortie et aura surement optimiser ce genre d'opérations.
 
Enfin, bref, ce que je veux dire, c'est que si vous avez la solution viable, donnez là, mais vous perdez un temps monstre juste pour gagner quelques ms sur les topics à grande page (qui sont relativement rares quand même).
 
Je ne peux pas vous filer les sources de mon forum, par contre, je peux vous donner toutes la méthodologie et toutes mes requêtes SQL au cas par cas, alors si vous avez THE méthode, donnez là qu'on arrête de tourner autour du pot juste pour THE LIMIT. :D
 
Enfin, vous faites ce que vous voulez, après tout, ça entretiens le topic.


la nuit vers 2h du matin quand ya plus grand monde (quand meme 700 visiteurs :D) le topic fait dans les 0.050 ;)


---------------
Découvre le HFRcoin ✈ - smilies
n°1366109
fabien
Vive la super 5 !
Posté le 14-05-2006 à 23:30:31  profilanswer
 

soulmanto a écrit :

Le LIMIT est une solution viable pour les petits forums. Dès que le nombre de messages devient grand, c'est un gouffre en ressources et les temps de requête s'allongent considérablement. :eek:


non mais arreter de dire n'importe quoi !
 
le limit c'est fait pour cherche un certain nombre de ligne, plus vous cherchez de lignes, plus c'est long.
 
du genre select * from message limit 0,30 ca va etre trés vite s'il l'index est bien placé, par contre limit 500000,30 ca va etre trés long car cette fois ci tu parcourt 500 000 lignes.
 
Faut juste que tu te debrouille pour ne pas parcourir ces 500 000 lignes.

Message cité 1 fois
Message édité par fabien le 14-05-2006 à 23:31:13

---------------
Découvre le HFRcoin ✈ - smilies
n°1366112
soulmanto
Chat Noir replica
Posté le 14-05-2006 à 23:36:38  profilanswer
 

Hum, je peux me planter, mais il me semble que le LIMIT écarte les enregs déjà récupérés par le select... Si tu as 500000 messages dans ton topic et que tu fais

Code :
  1. SELECT [...] FROM message WHERE topic=IdTopic LIMIT X, Y


 
Tu vas ramener 500000 lignes pour en afficher ensuite Y à partir de la Xième.

Message cité 1 fois
Message édité par soulmanto le 14-05-2006 à 23:36:58
n°1366113
xman
branleur
Posté le 14-05-2006 à 23:37:20  profilanswer
 

fabien a écrit :

non mais arreter de dire n'importe quoi !
 
le limit c'est fait pour cherche un certain nombre de ligne, plus vous cherchez de lignes, plus c'est long.
 
du genre select * from message limit 0,30 ca va etre trés vite s'il l'index est bien placé, par contre limit 500000,30 ca va etre trés long car cette fois ci tu parcourt 500 000 lignes.
 
Faut juste que tu te debrouille pour ne pas parcourir ces 500 000 lignes.


 
Je le suis pas d'accord ! :non:
Le LIMIT n'est pas spécialement + lent lorsqu'on veut conserver des lignes éloignées mais parce que s'il est précédé d'un ORDER BY, le tri sera fait sur TOUTES les lignes puis on n'en garde que certaines. Et le tri est long !
Alors que si on se démerde pour utiliser BETWEEN au lieu de LIMIT, on réduit le nombre de lignes à trier.
Et trier 30 lignes, c'est rapide alors qu'en trier 500 000 c'est très long !
 
Exemple d'un topic de 100 000 messages avec LIMIT :

Code :
  1. SELECT * FROM messages WHERE topic = 1 ORDER BY date LIMIT 1000,30


ça va récuperer 100 000 messages, les trier par date puis en renvoyer 30 à partir du 1000ème.
 
Tandis qu'avec BETWEEN :

Code :
  1. SELECT * FROM messages WHERE topic = 1 AND ordre BETWEEN 1001 AND 1030 ORDER BY ordre


ça va récupérer 30 messages et ne trier que ces 30-là (et encore je ne suis pas sûr du tout que le tri est nécessaire mais c'est au cas où...)

Message cité 3 fois
Message édité par xman le 14-05-2006 à 23:43:42
n°1366115
The-Shadow
T'as été voir dans ton profil?
Posté le 14-05-2006 à 23:38:31  profilanswer
 

soulmanto a écrit :

Hum, je peux me planter, mais il me semble que le LIMIT écarte les enregs déjà récupérés par le select... Si tu as 500000 messages dans ton topic et que tu fais

Code :
  1. SELECT [...] FROM message WHERE topic=IdTopic LIMIT X, Y


 
Tu vas ramener 500000 lignes pour en afficher ensuite Y à partir de la Xième.


Euh non, je ne pense pas que tu les ramènes.
Je viens de regarder sur mon forum, la consommation mémoire est identique entre la page 1 et la page 473 du topic "bonjour".

Message cité 1 fois
Message édité par The-Shadow le 14-05-2006 à 23:39:12
n°1366116
The-Shadow
T'as été voir dans ton profil?
Posté le 14-05-2006 à 23:40:25  profilanswer
 

xman a écrit :

Je le suis pas d'accord ! :non:
Le LIMIT n'est pas spécialement + lent lorsqu'on veut conserver des lignes éloignées mais parce que s'il est précédé d'un ORDER BY, le tri sera fait sur TOUTES les lignes puis on n'en garde que certaines. Et le tri est long !
Alors que si on se démerde pour utiliser BETWEEN au lieu de LIMIT, on réduit le nombre de lignes à trier.
Et trier 30 lignes, c'est rapide alors qu'en trier 500 000 c'est très long !


Perso, j'ai un double index sur la colonne idtopic,time, c'est peut-être pour ça que je ne perds pas grand chose avec mes limits. Enfin, je ne perds pas grand chose, je double disons mon temps de gen à la page 473.

n°1366118
belgique
Posté le 14-05-2006 à 23:42:29  profilanswer
 

The-Shadow a écrit :

C'est quoi grand ?
Si c'est HFR, combien sur ce topic peuvent prétendre atteindre un tel quota ? Non, parce qu'HFR, c'est ce qu'il y a de plus gros niveau national déjà. :D
Après, moi avec presque 310000 message, le LIMIT ne me fout pas tout en l'air non plus.
Bien sûr, je n'ai pas 2000 membres simultanée non plus. Mais mon serveur à base de Celeron est ridicule par rapport à HFR.
 
Mais il serait temps de penser aux vrais "nouveautés" d'un forum sur ce topic. Quand je vois que ma proposition de multivote s'est soldé en une page juste pour m'entendre dire que ce n'était pas terrible alors que ça fait un carton chez les utilisateurs. Je trouve dommage qu'on passe vite fait sur les trucs sympas et qu'on se prenne la tête 50 pages pour diviser le temps de génération du LIMIT.


Comprends bien le problème ce sont les gros topics plus que le nombre de messages général qui posent un problème avec le limit.

n°1366124
soulmanto
Chat Noir replica
Posté le 15-05-2006 à 00:08:14  profilanswer
 

The-Shadow a écrit :

Euh non, je ne pense pas que tu les ramènes.
Je viens de regarder sur mon forum, la consommation mémoire est identique entre la page 1 et la page 473 du topic "bonjour".


 
J'ai fait un EXPLAIN sur une requete de ce style, qui confirme ce que je pensais...
 

Code :
  1. mysql> EXPLAIN SELECT * FROM reponse WHERE idtopic=78880 ORDER BY idrep LIMIT 0,30;
  2. +----+-------------+-----------------+------+---------------+---------------+---------+-------+------+-------+
  3. | id | select_type | table           | type | possible_keys | key           | key_len | ref   | rows | Extra |
  4. +----+-------------+-----------------+------+---------------+---------------+---------+-------+------+-------+
  5. | 1  | SIMPLE      | reponse         | ref  | idx_rep_topic | idx_rep_topic | 3       | const | 1375 |       |
  6. +----+-------------+-----------------+------+---------------+---------------+---------+-------+------+-------+
  7. 1 row in set (0.00 sec)


 
Le LIMIT ramène bien la totalité des lignes avant de filtrer... Je précise qu'il y'a une clé primaire sur le champ "idrep"


Message édité par soulmanto le 15-05-2006 à 00:10:42
n°1366125
The-Shadow
T'as été voir dans ton profil?
Posté le 15-05-2006 à 00:11:07  profilanswer
 

Je pensais que quand tu disais "ramène", tu parlais de ramener les infos dans le script PHP. :D

n°1366126
soulmanto
Chat Noir replica
Posté le 15-05-2006 à 00:16:43  profilanswer
 

Du tout, et c'est justement là qu'est le gros hic avec le LIMIT pour les topics ou salons volumineux! M'enfin, dans un sens t'as raison, pourquoi se casser la tête si c'est pas nécessaire. Moi j'y ai bien été obligé, et c'est pas plus mal comme ça... L'ensemble de mon forum a été revu et corrigé pour tenir des charges bien plus élevées que celles qu'il supportait à l'origine et comme on dit, qui peut le plus peut le moins! :D

n°1366128
joce
"BugHunter"
Posté le 15-05-2006 à 00:37:12  profilanswer
 

xman a écrit :

Je le suis pas d'accord ! :non:
Le LIMIT n'est pas spécialement + lent lorsqu'on veut conserver des lignes éloignées mais parce que s'il est précédé d'un ORDER BY, le tri sera fait sur TOUTES les lignes puis on n'en garde que certaines. Et le tri est long !
Alors que si on se démerde pour utiliser BETWEEN au lieu de LIMIT, on réduit le nombre de lignes à trier.
Et trier 30 lignes, c'est rapide alors qu'en trier 500 000 c'est très long !
 
Exemple d'un topic de 100 000 messages avec LIMIT :

Code :
  1. SELECT * FROM messages WHERE topic = 1 ORDER BY date LIMIT 1000,30


ça va récuperer 100 000 messages, les trier par date puis en renvoyer 30 à partir du 1000ème.
 
Tandis qu'avec BETWEEN :

Code :
  1. SELECT * FROM messages WHERE topic = 1 AND ordre BETWEEN 1001 AND 1030 ORDER BY ordre


ça va récupérer 30 messages et ne trier que ces 30-là (et encore je ne suis pas sûr du tout que le tri est nécessaire mais c'est au cas où...)


c'est pas l'order by qui prend du temps, c'est le fait de devoir scanner les x premier avant de trouver le 100000 messages. (parce que si t'as un index sur (topic,date), mysql renvoie les resultats de façon ordonnés de toute façon)

n°1366129
xman
branleur
Posté le 15-05-2006 à 00:59:57  profilanswer
 

J'ai déjà un index sur topic mais tu veux dire que si je rajoute un index sur date, je peux me dispenser du ORDER BY date, ils seront toujours dans le bon ordre avec ou sans "ORDER BY date" ?
Je savais pas ça. [:totoz] (Han ! Le n0ob que je suis ! [:cupra])
 
(enfin bon, maintenant que j'ai implémenté la version avec champ ordre, je vais pas revenir en arrière)
 
PS : je suppose (j'espère !) que MySQL le sait et que si je lui dis quand même de faire un "ORDER BY date" il va se dire que c'est pas la peine et ne passera pas du temps à faire un truc inutile, hein ?

Message cité 2 fois
Message édité par xman le 15-05-2006 à 01:07:52
n°1366133
belgique
Posté le 15-05-2006 à 01:26:36  profilanswer
 

xman a écrit :

J'ai déjà un index sur topic mais tu veux dire que si je rajoute un index sur date, je peux me dispenser du ORDER BY date, ils seront toujours dans le bon ordre avec ou sans "ORDER BY date" ?
Je savais pas ça. [:totoz] (Han ! Le n0ob que je suis ! [:cupra])
 
(enfin bon, maintenant que j'ai implémenté la version avec champ ordre, je vais pas revenir en arrière)
 
PS : je suppose (j'espère !) que MySQL le sait et que si je lui dis quand même de faire un "ORDER BY date" il va se dire que c'est pas la peine et ne passera pas du temps à faire un truc inutile, hein ?


Non tu ne peux pas t'en passer, Joce veut dire que c'est "gratuit" je suppose.

n°1366136
xman
branleur
Posté le 15-05-2006 à 01:53:44  profilanswer
 

Je vais encore poser une question de noob...
 
Qu'est-ce qui est le mieux entre une jointure et une requête dans une boucle ?
Genre, pour lister les messages en affichant des infos sur l'auteur :
 
1°) (avec jointure)
requête messages+auteur
 
2°) (avec boucle)
requête messages
while (message) requête auteur
 
Intuitivement, je dirais que c'est la version avec jointure qui est la mieux car on ne hache pas les accès à la BD et puis surtout SQL doit sûrement arriver à ne pas relire X fois les infos d'un même auteur qui aurait posté plusieurs messages dans la page... Mais j'en suis pas sûr et dans le cas d'une boucle, ça permet de ne pas chercher à lire les infos sur l'auteur dans le cas où il aurait été supprimé (banni).

Message cité 1 fois
Message édité par xman le 15-05-2006 à 01:55:48
n°1366137
joce
"BugHunter"
Posté le 15-05-2006 à 02:05:27  profilanswer
 

xman a écrit :

J'ai déjà un index sur topic mais tu veux dire que si je rajoute un index sur date, je peux me dispenser du ORDER BY date, ils seront toujours dans le bon ordre avec ou sans "ORDER BY date" ?
Je savais pas ça. [:totoz] (Han ! Le n0ob que je suis ! [:cupra])
 
(enfin bon, maintenant que j'ai implémenté la version avec champ ordre, je vais pas revenir en arrière)
 
PS : je suppose (j'espère !) que MySQL le sait et que si je lui dis quand même de faire un "ORDER BY date" il va se dire que c'est pas la peine et ne passera pas du temps à faire un truc inutile, hein ?


non, je dis juste qu'avec un index sur (topic,date), mysql aura pas besoin de faire de filesorting si tu lui mets un order by date. (attention je dis pas de rajouter un index sur date, je dis de mettre un compound index sur (topic,date))

n°1366138
joce
"BugHunter"
Posté le 15-05-2006 à 02:06:25  profilanswer
 

xman a écrit :

Je vais encore poser une question de noob...
 
Qu'est-ce qui est le mieux entre une jointure et une requête dans une boucle ?
Genre, pour lister les messages en affichant des infos sur l'auteur :
 
1°) (avec jointure)
requête messages+auteur
 
2°) (avec boucle)
requête messages
while (message) requête auteur
 
Intuitivement, je dirais que c'est la version avec jointure qui est la mieux car on ne hache pas les accès à la BD et puis surtout SQL doit sûrement arriver à ne pas relire X fois les infos d'un même auteur qui aurait posté plusieurs messages dans la page... Mais j'en suis pas sûr et dans le cas d'une boucle, ça permet de ne pas chercher à lire les infos sur l'auteur dans le cas où il aurait été supprimé (banni).


Il faut bencher ;)

n°1366140
The-Shadow
T'as été voir dans ton profil?
Posté le 15-05-2006 à 02:15:40  profilanswer
 

joce a écrit :

non, je dis juste qu'avec un index sur (topic,date), mysql aura pas besoin de faire de filesorting si tu lui mets un order by date. (attention je dis pas de rajouter un index sur date, je dis de mettre un compound index sur (topic,date))


C'est ce que je fais.  :love:  
 
Et ça accélère mon LIMIT...  [:amandine75011]

n°1366141
fabien
Vive la super 5 !
Posté le 15-05-2006 à 02:26:28  profilanswer
 

m'enfin bon, vaut mieux faire un order sur l'id du message que sur la date du message (avec l'id autoincrement)


---------------
Découvre le HFRcoin ✈ - smilies
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  366  367  368  ..  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)