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

MS SQL Server Discussion :

Utilisation des types de données bit dans SQL Server


Sujet :

MS SQL Server

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Utilisation des types de données bit dans SQL Server
    Salut,

    Mon client à reçu les conseils d'un expert SQL Server qui déclare qu'il ne faut pas utiliser le type bit de SQL Server (dans mon cas 2005) mais lui préférer le smallint ( je me place dans l'hpothèse où je ne peux pas faire autrement que d'utiliser un type booléen pour une colonne).

    Je n'arrive pas à trouver d'argument étayant cette assertion. En effet d'après les doc de $Soft, un type bit prend un octet. Or à ma connaissance les processeurs X86-X64 n'ont aucune difficultés à manipuler des octets (contrairement à des champs de bits).
    En revanche ne pas utiliser un champ bit se révèle assez pénible dans le code métier (dans mon cas en C# avec des objets fortement typés).

    En conclusion je ne vois aucune raison (dans l'hypothèse où je n'ai pas d'autre choix que de créer une colonne de type booléen) de bouder le type bit.

    Je suis en train de faire un modèle conceptuel de données pour mon client et j'espère que quelqu'un pourrait me donner un tuyau pour faire le bon choix.

    Merci d'avance

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 893
    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 : 21 893
    Points : 53 132
    Points
    53 132
    Billets dans le blog
    6
    Par défaut
    Votre expert a tort...
    Un bit ne prend pas un octet, mais prend un bit sur un octet. Cela veut dire que jusqu'à concurrence de 8 colonnes de type BIT cela se fera sur le même octet.

    Un bit n'est donc indexable qu'à travers l'octet qui le porte. Or un bit n'ayant que deux valeurs, l'indexation d'un bit ne présente aucun intérêt. En effet l'intérêt d'un index est de retrouver rapidement une valeur précise dans un ensemble contenant de nombreuses valeurs différentes. Imaginez que vous cherchez le mot hétérocerque dans un dictionnaire comme le Robert. Vous irez très vite à trouver ce mot. Imaginez que maintenant vous ayez un dictionnaire spécial avec un seul mot, le même (par exemple ornithorynque) à toutes les pages, sauf la dernière... A votre avis la lecture des différentes définitions de ce même mots va vous prendre plus de temps ou moins de temps que dans le cas du bon dico ?

    Vous venez donc de comprendre qu'un index n'a d'intérêt que si la dispersion des valeurs de cet index est importante, ce qui n'est pas le cas du bit (2 vakleurs).

    Maintenant prendre des entiers à la place du type BIT est idiot, car cela va agrandir les lignes de la table donc être moins performant à tous les niveaux : insertion, UPDATE, SELECT....

    Question... Pouvez vous me donner le nom de cet expert ? (en mail privé bien sur...)

    parce que je rigole quand j'entends des conneries pareilles, moi qui me prétend bassement expert SQL / SQGBDR et MS SQL Server (c'est d'ailleurs pour cela que je suis MVP et que les MVP SQL Server si y'en a 5 à ce jour, c'est déjà beaucoup...)

    A +

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour cette réponse si rapide.

    Je n'avais évidemment pas l'intention de monter un index sur une colonne de type bit.

    J'ai pu vérifier dans le msdn qu'un bit est bien géré en tant que tel par SQL Server 2005 :

    The Microsoft SQL Server 2005 Database Engine optimizes storage of bit columns. If there are 8 or less bit columns in a table, the columns are stored as 1 byte. If there are from 9 up to 16 bit columns, the columns are stored as 2 bytes, and so on.
    http://msdn.microsoft.com/en-us/library/ms177603.aspx

    Ce qui est étrange c'est que dans le cours officiel $soft 2779 ou 2780 (je ne suis pas au boulot) il est dit qu'un type bit est géré sur un octet : il faudrait qu'ils se mettent d'accord! Cela dit je vérifierai la prochaine fois que j'ai accès au bouquin que j'ai bien lu

    En ce qui concerne l'expert en question, je ne fais que rapporter ce que j'ai compris de ce que mon client m'a dit que l'expert aurait dit : ça me rappelle un jeu auquel je jouais lorsque j'étais gamin .

    Pour en avoir le coeur net au sujet des performances des types bit dans SQL Server 2005, il faudrait monter un jeu de tests de performances sur des tables avec des champs bit et smallint, ce que je n'ai pas le temps de faire...a moins qu'il existe des benchmarks sur le sujet, en connaissez-vous?

    Dans l'immédiat, en ce qui concerne mon mcd, je vais simplement utiliser les type bit.

    Merci encore

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Points : 502
    Points
    502
    Par défaut
    Hmmm. Peut-être faisait-il référence à l'utilisation d'un integer bitmap plutôt que d'utiliser plusieurs colonnes de type bit.

    À ce moment, une colonne bitmappée offre plus de versatilité et parfois de meilleures performances.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 893
    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 : 21 893
    Points : 53 132
    Points
    53 132
    Billets dans le blog
    6
    Par défaut
    yes baby needle. En en plus, apparemment l'expert c'était moi !!!

    A +

Discussions similaires

  1. Des données hiérarchiques dans SQL SERVER
    Par Rymaya dans le forum Développement
    Réponses: 1
    Dernier message: 09/11/2012, 16h53
  2. Utilisation des types entier non signés dans Win32
    Par colorid dans le forum Langage
    Réponses: 1
    Dernier message: 18/12/2009, 10h04
  3. Réponses: 0
    Dernier message: 27/10/2009, 12h24
  4. Utilisation DU PMT d un prét dans SQL SERVER 2000
    Par aziz2081 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 03/01/2007, 09h07
  5. Type de donnée image sous Sql Server Dba
    Par Vanesse dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/05/2004, 11h43

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