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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Un ALTER sur beaucoup d'enregistrements ...

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4  5  6  7  8
Page Précédente
Auteur Sujet :

Un ALTER sur beaucoup d'enregistrements ...

n°481428
Max Evans
Posté le 08-08-2003 à 19:41:20  profilanswer
 

Salut a tous :hello:
 
Je veux faire un :
 
ALTER TABLE ma_table ORDER BY champ1 DESC.
 
Sur une table de 100 000 enregistrements, la requete met plus de 8s pour s'effectuer :??:
 
J'ai loupé kke chose ?
 
N'y a t il pas une autre requete pour classer des enregistrements a la maniere de ce ALTER ?
 
Merci a tous ;)
 
PS : BDD MySQL 4.0.13 :)

mood
Publicité
Posté le 08-08-2003 à 19:41:20  profilanswer
 

n°481437
MagicBuzz
Posté le 08-08-2003 à 20:14:50  profilanswer
 

Faire un index ordonné ?
 
PS: je vois pas l'intérêt de trier physiquement les données, ça réduira pas spécialement les accès disques (un serveur correctement dimensionné dispose de suffisament de mémoire pour contenir l'intégrité des indexes en mémoire) et dès que tu vas rajouter/modifier des lignes du va polluer l'ordre, donc ça ne sert à rien.
 
Sinon, c'est normal, un alter est toujours lent, puisque tu touches aux données physiques, donc grossomodo, c'est comme si tu lançais un defrag sur une région du disque très fragmentée...

n°481448
Taz
bisounours-codeur
Posté le 08-08-2003 à 20:19:42  profilanswer
 

MagicBuzz a écrit :

Sinon, c'est normal, un alter est toujours lent, puisque tu touches aux données physiques, donc grossomodo, c'est comme si tu lançais un defrag sur une région du disque très fragmentée...

Rhooo le mec sous windows!
 
effectivement, le ALTER comme ça n'a aucune interet dans le sens ou tu peux obtenir le meme résultat avec un index. de plus, comme le dit MB, l'index peut tenir en RAM (on va dire que sa taille est souvent bine inférieure à celle de la table), et ça structure bien plus efficace en termes de recherche. l'autre plus, c'est que tu peux indexés plusieurs champs, là ou avec un alter tu mets une préférence sur un champ donné, au très grand détriment de tous les autres. et en plus c'est lent, ce qui est bien normal. tu sais ce qu'il te reste à faire

n°481449
Max Evans
Posté le 08-08-2003 à 20:20:30  profilanswer
 

Beh mon idée, a la base c'était de faire un ORDER BY champ1 DESC dans une requete (Pour afficher des enregistrements)
 
Or il est peut etre preferable de trier ce champ, comme si MySQL triait les résultats par défaut ...
 
Du coup, dans ma requete d'affichage, j'aurai pu enlever le ORDER BY, vu k'il m'aurait de toute facon tout trier par champ1.
 
J'espere avoir été clair ;)

n°481453
Max Evans
Posté le 08-08-2003 à 20:21:55  profilanswer
 

Taz a écrit :

Rhooo le mec sous windows!
 
effectivement, le ALTER comme ça n'a aucune interet dans le sens ou tu peux obtenir le meme résultat avec un index. de plus, comme le dit MB, l'index peut tenir en RAM (on va dire que sa taille est souvent bine inférieure à celle de la table), et ça structure bien plus efficace en termes de recherche. l'autre plus, c'est que tu peux indexés plusieurs champs, là ou avec un alter tu mets une préférence sur un champ donné, au très grand détriment de tous les autres. et en plus c'est lent, ce qui est bien normal. tu sais ce qu'il te reste à faire


 
Je comprends assez mal cette histoire d'index :/
 
Mon champ est deja indexé, mais quand je veux afficher les résultats du 99 500 au 99 530 par exemple, j'obtiens des temps proches de 0.5s :/
 
Ca se comprend vu que MySQL scanne une fois la table, puis la rescanne pour la trier :)

n°481455
Taz
bisounours-codeur
Posté le 08-08-2003 à 20:23:07  profilanswer
 

oui, mais ton alter ne va te servir que si tu fais une requete qui renvoie un nombre enorme d'entrée et que tu les veux dans l'odre. par ce que sur 100.000 entrées, si tu fais une requete qui renvoie 10 entrées, c'est pas la mort à trier. alors qu'avec alter, tu force le tri complet; et la c'est la mort... vraiment fait des index...

n°481458
Max Evans
Posté le 08-08-2003 à 20:24:02  profilanswer
 

Taz a écrit :

oui, mais ton alter ne va te servir que si tu fais une requete qui renvoie un nombre enorme d'entrée et que tu les veux dans l'odre. par ce que sur 100.000 entrées, si tu fais une requete qui renvoie 10 entrées, c'est pas la mort à trier. alors qu'avec alter, tu force le tri complet; et la c'est la mort... vraiment fait des index...


 
C'est pas la mort, mais pour les derniers enregistrements, c'est tout de meme de l'ordre de 0.5s.
 
Et vu que c'est le cadre de la conception d'un forum, c'est pas tip top :/


Message édité par Max Evans le 08-08-2003 à 20:24:12
n°481459
Taz
bisounours-codeur
Posté le 08-08-2003 à 20:24:21  profilanswer
 

Max Evans a écrit :


 
Je comprends assez mal cette histoire d'index :/
 
Mon champ est deja indexé, mais quand je veux afficher les résultats du 99 500 au 99 530 par exemple, j'obtiens des temps proches de 0.5s :/
 
Ca se comprend vu que MySQL scanne une fois la table, puis la rescanne pour la trier :)

des ALTER là... c'est possible ça? 30 éléments à trier seulement  :ouch: pas la peine de trier toute la table

n°481460
Max Evans
Posté le 08-08-2003 à 20:24:57  profilanswer
 

Taz a écrit :

des ALTER là... c'est possible ça? 30 éléments à trier seulement  :ouch: pas la peine de trier toute la table


 
Nan nan !
Je dois trier TOUTE la table, car n'importe quel enregistrement est suceptible d'etre sorti :)

n°481461
Taz
bisounours-codeur
Posté le 08-08-2003 à 20:24:58  profilanswer
 

c'est quoi ta requete?

mood
Publicité
Posté le 08-08-2003 à 20:24:58  profilanswer
 

n°481465
Taz
bisounours-codeur
Posté le 08-08-2003 à 20:25:59  profilanswer
 

Max Evans a écrit :


 
Nan nan !
Je dois trier TOUTE la table, car n'importe quel enregistrement est suceptible d'etre sorti :)

l'index est là. encore une fois, tu prends le problème à l'envers. tu ne vas pas trier 100.000 éléments pour ensuite en choisir 30 et magique, ils sont déjà dans l'odre, ça ne vaut pas le coup, mais alors pas du tout.

n°481466
Max Evans
Posté le 08-08-2003 à 20:26:30  profilanswer
 

C'est un truc tout con :
 
 

SELECT *        FROM nono_topic_cat1
        WHERE trash = 0
        ORDER BY dernier_date DESC
        LIMIT $debut,$nbpostspage


 
$debut et $nbpostspage peuvent etre changé (En fait, c'est pour la page des topics cette requete, donc quand tu changes de page, ces deux variables changent aussi ;))

n°481467
Max Evans
Posté le 08-08-2003 à 20:27:08  profilanswer
 

Taz a écrit :

l'index est là. encore une fois, tu prends le problème à l'envers. tu ne vas pas trier 100.000 éléments pour ensuite en choisir 30 et magique, ils sont déjà dans l'odre, ça ne vaut pas le coup, mais alors pas du tout.


 
Effectivement, mais j'essaye de trouver un solution pour avoir de bon temps de traitement a l'affichage ;)

n°481470
Taz
bisounours-codeur
Posté le 08-08-2003 à 20:30:10  profilanswer
 

c'est bizarre... elle fait combien de Mo ta table? par ce que c'est simpliste comme requete, ça devrait pas être la mort...
 
et avoir ta requete, alter ne sert vraiment à rien

n°481471
Max Evans
Posté le 08-08-2003 à 20:30:18  profilanswer
 

Ou alors, je peux laisser mon ORDER BY dernier_date DESC, et faire un CRON chaque nuit en faisant mon ALTER
 
Ca peut surement MySQL nop ? :)

n°481473
Taz
bisounours-codeur
Posté le 08-08-2003 à 20:31:01  profilanswer
 

non, c'est nul comme solution ça... et surtout ça sert à rien


Message édité par Taz le 08-08-2003 à 20:31:23
n°481474
Max Evans
Posté le 08-08-2003 à 20:31:03  profilanswer
 

La table fait 18 Mo :)

n°481475
Max Evans
Posté le 08-08-2003 à 20:32:38  profilanswer
 

Merde je comprends plus la :??:
 
J'viens de toucher a un truc, et je fais du 0.170s maintenant :??:

n°481477
Taz
bisounours-codeur
Posté le 08-08-2003 à 20:32:51  profilanswer
 

Max Evans a écrit :

La table fait 18 Mo :)

fais un test un peu plus poussé s'il te plait: fait une série de 10/100 requetes avec des param différents pour etre sur

n°481478
Taz
bisounours-codeur
Posté le 08-08-2003 à 20:33:30  profilanswer
 

Max Evans a écrit :

Merde je comprends plus la :??:
 
J'viens de toucher a un truc, et je fais du 0.170s maintenant :??:

j'en étais sur. ben devait y avoir un truc en attente, un index à mettre à jour, ou une autre connerie

n°481479
Max Evans
Posté le 08-08-2003 à 20:33:40  profilanswer
 

Max Evans a écrit :

Merde je comprends plus la :??:
 
J'viens de toucher a un truc, et je fais du 0.170s maintenant :??:


 
Ha nan j'ai rien dit ;)

n°481480
Max Evans
Posté le 08-08-2003 à 20:34:06  profilanswer
 

Taz a écrit :

fais un test un peu plus poussé s'il te plait: fait une série de 10/100 requetes avec des param différents pour etre sur


 
Cmt ca ?
Je change les valeurs du LIMIT ?

n°481481
Taz
bisounours-codeur
Posté le 08-08-2003 à 20:34:51  profilanswer
 

oui pour voir
et essaye d'en sortir de statistiques / nombre de résultat,  temps nécessaire par résultat


Message édité par Taz le 08-08-2003 à 20:35:48
n°481482
Max Evans
Posté le 08-08-2003 à 20:34:58  profilanswer
 

Oki :)

n°481485
MagicBuzz
Posté le 08-08-2003 à 20:36:43  profilanswer
 

Max Evans :

Mon champ est deja indexé, mais quand je veux afficher les résultats du 99 500 au 99 530 par exemple, j'obtiens des temps proches de 0.5s :/  


Euh... C'est koi ton serveur ? Un serveur mutualisé faisant tourner 200 BDD sur un P75 ?
 
Nan, parceque je m'étais amusé à faire un bench sur mon portable P100 (on peut pas imaginer plus lent, que ce soit le CPU, le disque, ou le fait qu'il n'y a que 32 Mo de RAM) qui tournais sous Linux.
Et j'obtenais de meilleurs résultat avec une table contenant 1 000 000 d'enregistrement, en faisant des fonctions de regroupement :??:


Message édité par MagicBuzz le 08-08-2003 à 20:37:35
n°481487
x-httpd-ph​p
Posté le 08-08-2003 à 20:38:31  profilanswer
 

Vire le WHERE, ça ira mieux :whistle:

n°481488
Max Evans
Posté le 08-08-2003 à 20:38:33  profilanswer
 

LIMIT 10 (10 derniers enregistrements sur 100 000) > Page générée en 0.888034 secondes
 
LIMIT 100 > Page générée en 0.8926029 secondes
 
 
LIMIT 1000 > Page générée en 0.9745231 secondes

n°481489
Max Evans
Posté le 08-08-2003 à 20:39:14  profilanswer
 

MagicBuzz a écrit :


Euh... C'est koi ton serveur ? Un serveur mutualisé faisant tourner 200 BDD sur un P75 ?
 
Nan, parceque je m'étais amusé à faire un bench sur mon portable P100 (on peut pas imaginer plus lent, que ce soit le CPU, le disque, ou le fait qu'il n'y a que 32 Mo de RAM) qui tournais sous Linux.
Et j'obtenais de meilleurs résultat avec une table contenant 1 000 000 d'enregistrement, en faisant des fonctions de regroupement :??:


 
:??:
 
Barton 2500+
1 Go DDR
DD 120 Go 7200 t/min
 
OUINNN, y a un truc qui cloche la !  :ouch:

n°481490
MagicBuzz
Posté le 08-08-2003 à 20:39:21  profilanswer
 

Max Evans a écrit :

C'est un truc tout con :
 
 

SELECT *        FROM nono_topic_cat1
        WHERE trash = 0
        ORDER BY dernier_date DESC
        LIMIT $debut,$nbpostspage


 
$debut et $nbpostspage peuvent etre changé (En fait, c'est pour la page des topics cette requete, donc quand tu changes de page, ces deux variables changent aussi ;))


=> Fait un index qui porte sur trash et dernier_date, trié sur dernier_date
 
Enfin... Chais pas si MySQL supporte les index ordonnés

n°481491
Max Evans
Posté le 08-08-2003 à 20:39:29  profilanswer
 

x-httpd-php a écrit :

Vire le WHERE, ça ira mieux :whistle:


 
Le champ TRASH est indexé, mais je vais essayer kand meme :)

n°481493
Max Evans
Posté le 08-08-2003 à 20:40:16  profilanswer
 

J'ai rien gagné en enlevant le WHERE :)

n°481494
Max Evans
Posté le 08-08-2003 à 20:40:38  profilanswer
 

MagicBuzz a écrit :


=> Fait un index qui porte sur trash et dernier_date, trié sur dernier_date
 
Enfin... Chais pas si MySQL supporte les index ordonnés


 
Deja indexé ces deux champ :/
 
Quant a l'index ordonné, je ne sais pas cmt faire :/

n°481496
Taz
bisounours-codeur
Posté le 08-08-2003 à 20:41:23  profilanswer
 

MagicBuzz a écrit :


=> Fait un index qui porte sur trash et dernier_date, trié sur dernier_date
 
Enfin... Chais pas si MySQL supporte les index ordonnés

tu crois le système tri les résultats en fonction de l'index? ou alors tu veux dire qu'il les sélectionne dans l'odre?

n°481498
x-httpd-ph​p
Posté le 08-08-2003 à 20:42:01  profilanswer
 

Max Evans a écrit :

J'ai rien gagné en enlevant le WHERE :)

C'est pas normal que ce soit si long :heink:

n°481499
Max Evans
Posté le 08-08-2003 à 20:42:11  profilanswer
 

Je ne pense pas qu'il les selectionne dans l'ordre vu qu'il doit rescanner la table pour la trier :/

n°481500
Taz
bisounours-codeur
Posté le 08-08-2003 à 20:42:14  profilanswer
 

Max Evans a écrit :

J'ai rien gagné en enlevant le WHERE :)

ben évidemment, ct un reponse alac
 
t'as pas une putain d'option: reconstruire la base de données?

n°481501
Max Evans
Posté le 08-08-2003 à 20:42:30  profilanswer
 

x-httpd-php a écrit :

C'est pas normal que ce soit si long :heink:


 
Je sais bien ! :D
 
Mais bon, le TRASH était deja indexé, donc a ce niveau la, ca roule ;)

n°481502
MagicBuzz
Posté le 08-08-2003 à 20:42:46  profilanswer
 

Taz a écrit :

tu crois le système tri les résultats en fonction de l'index? ou alors tu veux dire qu'il les sélectionne dans l'odre?


Bah, c'est un index avec une structure d'arbre binaire.
Donc pour retrouver des champs suivant un ordre c'est extrêment rapide, puisqu'une simple recherche dicotomique permet en très peu d'ittérations de retrouver les noeuds entiers contenant les lignes à retourner.

n°481503
Max Evans
Posté le 08-08-2003 à 20:43:13  profilanswer
 

Taz a écrit :

ben évidemment, ct un reponse alac
 
t'as pas une putain d'option: reconstruire la base de données?


 
J'ai fais un REPAIR, ANALYSE, OPTIMIZE :D

n°481504
x-httpd-ph​p
Posté le 08-08-2003 à 20:43:34  profilanswer
 

Taz a écrit :

ben évidemment, ct un reponse alac
 
t'as pas une putain d'option: reconstruire la base de données?

Bah écoute, moi j'ai eu un problème similaire, j'ai viré le maximum de WHERE dans ma requête, et ça a grandement amélioré les choses, même si les champs étaient indexés [:spamafote]

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  6  7  8
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Un ALTER sur beaucoup d'enregistrements ...

 

Sujets relatifs
Comment avoir le nombre total d'enregistrements dans une table MySQL ?[Access] Comment évolue l'espace disque selon les enregistrements !
[MYSQL] Déplacer des enregistrements d'une table à une autrerequète sql en php modifiant plusieurs enregistrements
Supprimer TOUS les enregistrements d'une table ParadoxEncore un soucis VBA !!! Affichage des enregistrements
SQL Server : récupérer les enregistrements n à m, problème[oracle] récuérer les enregistrements n à m résultants d'une requête
compter simplement les enregistrements d'une table SQL..MySql : Alter Table ....ADD
Plus de sujets relatifs à : Un ALTER sur beaucoup d'enregistrements ...


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