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 :

Les NULL et les colonnes fragmentées


Sujet :

MS SQL Server

  1. #1
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut Les NULL et les colonnes fragmentées
    Bonsoir,

    J'aurais une petite question

    Voilà, il y a peut j'ai regardé l'aide sur les colonnes fragmentées pour les NULL.

    Je n'y ai pas prêté plus attention car je n'ai jamais été confronté à un cas de pourcentage de NULL aussi élevé que cette discussion.

    - Du coup, si vous auriez des exemples de cas dans lesquels le pourcentage de NULL est supérieur à 60%, cela m'intéresse Par curiosité

    Enfin ma question :

    L'utilisation des colonnes fragmentées a-t-elle un impact uniquement sur l'espace utilisé ou est-ce que cela à une réelle incidence sur le traitement d'une requête (Je parle pas d'instruction tel INSERT, UPDATE... etc !) ?


    Merci d'avance
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Je crois que tout est dans la documentation .

    Dans le cas que vous donnez ici, effectivement un index filtré sur 'maColonne IS NULL' n'a pas de sens.

    Comme une colonne fragmentée de prend pas d'espace physique pour stocker une colonne dont les valeurs sont massivement à NULL, je pense qu'en plus du gain d'espace, on soit obtenir un certain gain de performances (le nombre de pages devrait être moindre, donc le parcours d'un index devrait se faire plus vite).

    En revanche comme le stockage d'une valeur demande 4 octets de plus que la normale, il faut bien juger le gain d'espace avant de l'implémenter.

    Il est aussi à noter que les données utilisateur stockables dans une page d'une table dont une colonne au moins est fragmentée passe de 8060 à 8018 octets.

    Enfin pour juger du gain ou de la perte de performances à l'ajout, la modification ou la suppression de lignes, je pense qu'on ne peut pas émettre de règle là-dessus : la manipulation d'une table contenant une seule colonne fragmentée pour un type bit ne doit pas être la même que pour une colonne fragmentée de type XML ...

    @++

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 002
    Billets dans le blog
    6
    Par défaut
    Par exemple pour la DDE du Gard (Concentrateur de données du SPCGD : Service de prévision des crues du grand delta du rhône), le stockage de la pluviométrie est à 98% constitué d'une valeur 0... D’où l'idée de ne pas stocker ces valeurs et les remplacer par du NULL (sachant que ce qui nous intéresse c'est la cumul pluvio, dans ce cas NULL et 0 donne le même résultat).
    Et une table de plusieurs centaines de millions de lignes.
    Mais pour des raisons de budget, il a été décidé de prendre la version standard sur lequel ceci n'est pas implémenté !

    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/ * * * * *

  4. #4
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Bonjour,

    @Elsuket: Merci pour les précisions (C'est bien la Doc que je m'étais coltinée )
    Enfin pour juger du gain ou de la perte de performances à l'ajout, la modification ou la suppression de lignes, je pense qu'on ne peut pas émettre de règle là-dessus : la manipulation d'une table contenant une seule colonne fragmentée pour un type bit ne doit pas être la même que pour une colonne fragmentée de type XML ...
    Je me garde ça de côté !

    @SQLpro: Merci pour l'exemple, 98% de NULL/0, c'est énorme !

    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  5. #5
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Concernant l'espace de stockage sauvé la documentation dit ceci (je prends quelques exemples) :

    Bit 0.125 (NOT SPARSE) 4,125(SPARSE) 98% NULL
    int 4 (NOT SPARSE) 8 (SPARSE) 76% NULL

    Les valeurs de fin indiquent qu'il faut au moins avoir 98% / 76% de lignes avant une absence de valeur pour la colonne concernée pour au moins espérer 40% d'économie sur le stockage. Il faut donc prendre en considération le type de données et le % d'absences de valeurs pour espérer gagner de la place. Un mauvais calcul conduirait à avoir une table plus volumineuse avec l'utilisation des colonnes fragmentées.

    Les colonnes fragmentés peuvent également jouer tout leur rôles dans les tables EAV (Entité Attribut Valeur).

    ++

  6. #6
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    Les colonnes fragmentés peuvent également jouer tout leur rôles dans les tables EAV (Entité Attribut Valeur).
    Je les avais oubliées celles là
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  7. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Il faut les oublier, c'est une horreur !

    @++

  8. #8
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut


    Pourquoi dites vous cela @elsuket ?

    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Parce que c'est très facile à remplir, mais quasiment impossible à interroger de façon ensembliste et performante.

  10. #10
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Héhé oui, EAV ... on a le choix entre :

    - Entity Attribute Value
    - Entity Attribute Violation

    Cette approche n'est absolument pas ensembliste, donc ce n'est pas du SQL ...
    On stocke tout dans une colonne varchar, quel que soit le type réel de la valeur, et allez, CAST dans les jointures

    Enjoy

    @++

  11. #11
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Bonjour,

    Vu comme ça effectivement

    Merci
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



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

Discussions similaires

  1. Réponses: 0
    Dernier message: 29/06/2015, 10h27
  2. Mesure qui n'est pas lié à toutes les dimension => eviter les NULL
    Par khadhraoui1 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 14/08/2014, 12h04
  3. Réponses: 4
    Dernier message: 22/07/2008, 16h14

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