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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Mysql : après DELETE la base garde la même taille et problème d'Id

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Mysql : après DELETE la base garde la même taille et problème d'Id

n°1024509
Alkor2001
Posté le 25-03-2005 à 10:31:17  profilanswer
 

Bonjour, j'ai un nouveau problème (pas très grave) avec ma base Mysql (version 4.0.15).
 
J'ai plusieurs tables liées les unes aux autres, chacune ayant pour clé primaire une Id qui s'auto-incrémente. J'ai créé un outil qui permet de supprimer des lignes de données précises et qui fonctionne bien, mais après la suppression la base fait toujours la même taille! Je suis obligé (sous phpmyadmin) de faire "optimiser la table" pour que la taille soit mise à jour...
 
Ce n'est pas très gênant, mais ce qui m'embête plus c'est que la base semble garder en mémoire les Id des données que j'ai virées, ce qui donne des trucs bizarres:
J'ai une table client, avec 10 entrées (dernière Id = 10). Je supprime ces  10 entrées, j'analyse et j'optimise la table. Si j'exporte un nouveau client, il aura l'Id 11 au lieu de 1!  :heink:  
 
Quelqu'un pourrait m'expliquer pourquoi?


---------------
J'aime pas Apple...
mood
Publicité
Posté le 25-03-2005 à 10:31:17  profilanswer
 

n°1024581
Arjuna
Aircraft Ident.: F-MBSD
Posté le 25-03-2005 à 11:20:18  profilanswer
 

1) Pour ce qui est de la taille de la base, c'est normal : Imagine que le fichier de la base de données est une miche de pain. Tes données, c'est la mie. Quand tu enlèves de la mie de pain, la miche garde sa taille, et il y a des trous dedans. D'un point de vue fonctionnement, c'est rigoureusement la même chose. C'est une façon d'optimiser la rapidité de la base.
Imagine, tu as une table avec 100 000 000 lignes. Chaque ligne fait mettons 4 Ko. Ca donne donc 400 000 000 000 octets, soit 400 Go (c'est une grosse base :D)
 
Tu supprimes une ligne à l'indice 1 (donc en début de fichier). Si MySQL "optimisait" au fur et à mesure, alors ça voudrait dire qu'il déplace 400 Go - 4 Ko dans le fichier vers le début du fichier. Je te laisse te rendre compte à quel point ce serait lent ;)
Par définition, un fichier de base de données ne peut donc que grossir.
Par contre, je te rassure, quand tu rajoutes des lignes, selon un certain nombre de critères, MySQL essaie de reboucher les trous.
 
2) Ensuite, un autoincrément "standard", se comporte comme une séquence, c'est à dire qu'il ne pourra jamais prendre une valeur qu'il a déjà affecté, même si elle n'existe plus. C'est tout à fait normal, et heureusement d'ailleurs !
Si tu veux que ton compteur reparte de la valeur X après la suppression de lignes, tu peux faire un ALTER dessus. Normalement, MySQL a aussi un mode qui bouche les trous dans un autoincrément, mais je te déconseille très fortement de l'utiliser. En effet, c'est source de problèmes dans la cohérence de ta base, et surtout, un ID n'étant pas une valeur, mais un simple compteur interne, en aucun cas tu dois te baser dessus pour de l'affichage ou autre, donc quelque soit la valeur, tu t'en moques.


Message édité par Arjuna le 25-03-2005 à 11:20:47
n°1024658
Alkor2001
Posté le 25-03-2005 à 12:04:44  profilanswer
 

Merci de ta réponse!
En fait ce qui m'étonne pour l'histoire de l'incrémentation des Id c'est que même quand je supprime tout le contenu de la base, il ne repart pas de 0 pour les nouvelles données que je mettrai. Ton explication est logique, mais je ne trouve pas ça très optimisé...


---------------
J'aime pas Apple...
n°1027251
cinocks
Posté le 28-03-2005 à 13:19:10  profilanswer
 

qu'il ne revienne pas à 0 c'est normal s'il s'agit d'un autoincrement. Ca fait parti de sa definition, le numero unique.  
 
Pour la taille, c'est normal qu'elle ne soit pas recuperée immediatement. Ca deviendrait trop consommateur d'optimiser la structure en continu.


---------------
MZP est de retour

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

  Mysql : après DELETE la base garde la même taille et problème d'Id

 

Sujets relatifs
[XML/PHP/SQL] Formulaire dynamique + base de données: quel logiciel[MFC] Problème avec OnPaint et un Timer
Problème avec getURL();[MySQL/DB2] Migration
exportation du contenu d'une base de donnée vers xml avec javaexportation du contenu d'une base de donnée vers xml avec java
exportation du contenu d'une base de donnée vers xml avec java[MySql]Pb syntaxe que j'arrive pas a résoudre
[C#] Problème de surcharge [RESOLU]problème de css
Plus de sujets relatifs à : Mysql : après DELETE la base garde la même taille et problème d'Id


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR