IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration MySQL Discussion :

[QUESTION] Taille de vos VARCHARS


Sujet :

Administration MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 15
    Par défaut [QUESTION] Taille de vos VARCHARS
    Bien le bonjour

    Cela fait un petit moment que je developpe du php/mysql/css/html et je me suis toujours pose la question suivante :
    Comment déterminer la taille des varchars dans une structure de table ?

    je travaille actuellement avec des noms d'utilisateurs propre a notre entreprise
    (exemple: prenom_nom)

    Je dois donc deviner plus ou moins le nom et prénom de mes users.
    Pour les noms européens c'est un peu toujours pareil, mais les noms indiens c'est plus complique

    Generalement lorsque je cree mes table je me laisse de la marge mais je me demande si SQL voit un inconvénient a ce que je lui spécifie 70 caractère alors que je ne dépasse jamais les 20

    Merci a ceux qui m'auront lu

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Prévoir une taille trop grande peut alourdir la BDD. Mais cela sera surtout sensible avec un grand nombre de données (plusieurs centaines de milliers).

    je travaille actuellement avec des noms d'utilisateurs propre a notre entreprise
    VARCHAR(70) au lieu de VARCHAR(20), ça fait 50 caractères de plus. S'il y a 1000 employés, ça ne fait que 50 000 octets de plus, ce n'est rien pour un SGBD !

    Par contre, j'ose espérer que ce n'est pas la clé primaire de la table et qu'il existe une clé auto-incrémentée !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre averti
    Inscrit en
    Février 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 15
    Par défaut
    Non ce n'est pas ma cle primaire
    On m'a toujours dis de se limiter a des int, smallint, tinyint en cles primaire afin de produire des ID's

    Sinon pense tu que la fonction OPTIMIZE en SQL va diminuer les tailles de mes champs dans le cas present ?
    Ou optmize n'est que pour la creation d'index ?

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Je crois que OPTIMIZE réorganise les index et les tables qui ont eu des séries de suppressions/ajouts.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Février 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 129
    Par défaut
    L'effet d'OPTIMIZE dépend du moteur de stockage, mais en gros, ça défragmente les données, trie les index et met à jour les statistiques sur les index utilisées par l'optimiseur de requêtes.

    Pour avoir une idée de la "bonne taille" à prendre, tu peux utiliser PROCEDURE ANALYSE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM matable PROCEDURE ANALYSE(10,256)\G
    Il faut être critique avec le résultat obtenu, surtout si tu as peu de données dans ta table.

    Je te laisse voir dans la doc la signification des 2 paramètres de PROCEDURE ANALYSE...

    Au sujet de la différence entre un VARCHAR(70) et un VARCHAR(20), a priori il n'y en a pas puisque justement le but du VARCHAR est d'adapter la taille du stockage à la donnée.

    En réalité, c'est faux : pour des opérations comme les tris, MySQL va utiliser un buffer dans lequel il va placer les lignes à traiter pour faire l'opération. Et là, la taille mémoire utilisée est toujours le maximum possible pour chaque colonne. Si la taille indiquée dans la définition des champs est trop grande par rapport aux données, MySQL ne pourra pas faire tenir autant de lignes qu'il serait souhaitable dans ses buffers et les perfs vont chuter.

    Dans le cas des VARCHAR, un autre paramètre intervient : le jeu de caractères. Par exemple, si tu utilises latin1, chaque caractère pèse 1 octet, un VARCHAR(20) pèse donc au maximum 20 octets (plus un octet pour indiquer la taille, bref...) alors qu'un VARCHAR(70) en utf8 pèse au maximum 210 octets. Cela signifie qu'un buffer de tri contiendra 10 fois moins de lignes si elles sont en VARCHAR(70) utf8 ! La pratique qui veut qu'on mette tout en utf8 par défaut est donc plutôt dangereuse.

    Stéphane

Discussions similaires

  1. Réduisez jusqu'a plus de 65% la taille de vos exécutables
    Par DjmSoftware dans le forum C++Builder
    Réponses: 33
    Dernier message: 01/04/2012, 21h56
  2. taille définition champs varchar
    Par mussara dans le forum Requêtes
    Réponses: 2
    Dernier message: 25/01/2007, 09h32
  3. Réponses: 5
    Dernier message: 21/11/2006, 16h24
  4. Modifier la taille d'un varchar
    Par castaka dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 07/12/2005, 17h26
  5. Réponses: 9
    Dernier message: 29/07/2003, 14h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo