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

Décisions SGBD Discussion :

Y a t il un inconvénient à utiliser un varchar (5000) au lieu d'un varchar (256) ?


Sujet :

Décisions SGBD

  1. #1
    Membre émérite Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Par défaut Y a t il un inconvénient à utiliser un varchar (5000) au lieu d'un varchar (256) ?
    Hello,

    Y a t il un inconvénient (quel qu'il soit : optimisation du moteur, transmission réseau ...) à utiliser un varchar (5000) au lieu d'un varchar (256) par exemple ?

    En gros, y a t il un inconvénient à utiliser la capacité max des varchar même si on sait qu'on ne va jamais l'utiliser au max ?

    Merci d'avance.
    ++

  2. #2
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Bonjour,

    Je commets l'indélicatesse de répondre sans avoir croisé d'informations précises sur le sujet, j'espère que tu ne m'en tiendras pas rigueur... c'est un comportement compulsif

    Cela peut dépendre du SGBD et donc du moteur de stockage. Je ne sais pas quel SGBD a un max length de 5000. SQL Server est limité (plus vraiment exact en version 2005) à 8000, MySQL 5 à 65535 (http://dev.mysql.com/doc/refman/5.0/en/char.html), PostgreSQL ça va très loin, Firebird/Interbase : 32k, Oracle et DB2 je ne sais pas.
    Je pense que pour la plupart des SGBD, il n'y a pas de différence de performance dû à la taille maximale déclarée des varchar. Quand la donnée réellement stockée est petite, elle est lue directement dans la page de donnée, ou toute unité d'I/0 géré par le moteur de stockage.

    En ce qui concerne le trafic réseau, cela ne change rien. Ce qui est renvoyé au client est un jeu de résultat qui contient seulement les données, et pas de subtilités de stockage qui concernent seulement le serveur.

    Pour quelques moteurs de stockage, comme le MyISAM de MySQL, il y a une différence de performance entre CHAR et VARCHAR dûe à la nécessité de retrouver la taille de la donnée ou de savoir ou elle se trouve par pointeur dans l'enregistrement. Mais de varchar à varchar, cela doit être identique.

    Là où cela peut poser problème, ce n'est pas dans la déclaration de la taille, mais dans son utilisation : évidemment plus le volume des données est important, plus la lecture est coûteuse, et selon le SGBD, des mécanismes de dépassement ou de pointeur obligent à sortir de la page lorsque la donnée ne tient plus dans l'unité d'I/O.

    Quelques liens d'infos pour PostreSQL et Firebird.
    http://www.postgresql.org/docs/8.2/i...character.html
    http://www.volny.cz/iprenosil/interb...ib_strings.htm
    http://www.ibphoenix.com/main.nfs?a=...page=ibp_blobs

  3. #3
    Membre émérite Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Par défaut
    Hello,

    Merci de commettre l'indélicatesse de me répondre

    Pour préciser, la valeur de 5000 est juste indicative. Je me posais la question pour un chemin de fichier à enregistrer.
    Merci beaucoup pour tes infos et les liens, tout ceci conforte mon opinion "intuitive".

    ++

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 029
    Billets dans le blog
    6
    Par défaut
    3 choses

    1) SQL Server 2005 est limité à 4 294 967 295 en VARCHAR et 2 147 483 647 en NVARCHAR.

    2) la longeur importe peu si la sémantique l'exige. Autrement dit stocker 3000 caractères s'il n'y a pas de traitement derière ne sert par à grand chose. Allez vous faire du =, du LIKE sur cette colonne ?

    3) plus les données sont courte et moins il y a de volume à traiter et plus les temps de réponse sont court. Il y aura toujours un imbécile d'utilisateur pour mettre 5000 caractère dans cette colonne !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 293
    Par défaut
    Si la colonne est déclarée en VARCHAR(5000), mais que les données ne dépassent pas 50 caractères, les traitements seront-ils aussi rapides que si la colonne était déclarée en VARCHAR(50) ?

  6. #6
    Membre émérite Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Par défaut
    Hello,

    Citation Envoyé par SQLpro
    2) la longeur importe peu si la sémantique l'exige. Autrement dit stocker 3000 caractères s'il n'y a pas de traitement derière ne sert par à grand chose. Allez vous faire du =, du LIKE sur cette colonne ?
    Il n'y a pas de traitement. Il s'agit uniquement de stockage "simple" d'un path de fichier. Pas de like/'=' ou autre opération.

    Citation Envoyé par SQLpro
    3) plus les données sont courte et moins il y a de volume à traiter et plus les temps de réponse sont court. Il y aura toujours un imbécile d'utilisateur pour mettre 5000 caractère dans cette colonne !
    ok, mais en terme d'espace de stockage disque, les 2 sont bien équivalents?

    Merci de vos réponses.

  7. #7
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Bonjour,

    Autant que je sache, c'est équivalent, et de même rapidité, sans doute dans la plupart des moteurs de stockage.
    Le fait de pouvoir prédéterminer la taille d'un varchar est plus lié au typage fort des colonnes (= contraintes de domaine = intégrité de la structure des données) qu'à des contraintes techniques.

    Mais bon, c'est sauf méconnaissance de ma part.

  8. #8
    Membre émérite Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Par défaut
    C'est ce que je pense aussi, mais bon, je voulais être sûr

    merci !

  9. #9
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 228
    Billets dans le blog
    25
    Par défaut
    Equivalent et perf, mais "sale" d'un point de vue modélisation, et pas prudent (cf les utilisateurs de SQLPro )
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [phpMyAdmin] Utiliser l'extension MySQL au lieu de mysqli ?
    Par tintin72 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 27
    Dernier message: 25/02/2011, 10h37
  2. Quand utiliser un fichier xml au lieu d'une base de données?
    Par ChriGoLioNaDor dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 27/04/2010, 15h22
  3. Réponses: 2
    Dernier message: 17/02/2010, 18h27
  4. Utiliser Byte ou Short au lieu de Integer?
    Par dubem1 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/01/2009, 15h05
  5. Réponses: 19
    Dernier message: 28/04/2005, 16h36

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