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 SQL Server Discussion :

Nombre de colonne dans une table


Sujet :

Administration SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Billets dans le blog
    22
    Par défaut Nombre de colonne dans une table
    Bonjour à tous,

    Je suis débutant sur SQL SERVER et j'ai une question qui va surement paraitre stupide et évidente mais j'ai besoin d'explications.

    Je suis chargé de la base de donnée dans ma boite, et je viens de découvrir qu'une table possède 170 colonnes. Je trouve que cela est énorme et je propose de découper la table en plusieurs tables.

    Mais on me répond systématiquement pourquoi, qu'elle est l'intérêt d'avoir plusieurs tables. les développeurs ne veulent pas modifier leur programme pour rajouter des jointures.

    De plus la plupart du temps, seul une dizaine de colonne sont utilisées par des requêtes SELECT.

    Mes questions:
    - Le nombre de colonne est-il gênant ?
    - Une requête SELECT sur les 10 colonnes les plus fréquentes peut est elle être ralenti du au nombre de colonne ?
    - L'idée de créer plusieurs sous - tales est elle judicieuse ?


    Je vous remercie par avance
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  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 viens de découvrir qu'une table possède 170 colonnes. Je trouve que cela est énorme et je propose de découper la table en plusieurs tables.
    ouch, 170 colonnes c'est bien pour obtenir des performances médiocres et une application qui ne peut pas évoluer.

    Mais on me répond systématiquement pourquoi, qu'elle est l'intérêt d'avoir plusieurs tables. les développeurs ne veulent pas modifier leur programme pour rajouter des jointures.
    Le problème du changement d'habitudes ...

    Le nombre de colonne est-il gênant ?
    Oui, puisque c'est complètement anti-relationnel, inoptimisable, inadministrable, ce n'est pas souple et pas évolutif

    Une requête SELECT sur les 10 colonnes les plus fréquentes peut est elle être ralenti du au nombre de colonne ?
    Oui, parce que toutes les données de cette table sont stockées dans les mêmes pages, c'est à dire que vous stockez probablement dans une seule page très peu de lignes de votre table.

    Les pages de données représentent un espace 8192 octets, mais avec les informations d'entête de page et la table d'offsets de ligne stockée en fin de page, on peut stocker au maximum 8096 octets.

    Donc plus vous ajoutez de colonnes :

    - plus vous ajoutez d'octets à votre ligne,
    - moins vous pouvez stocker de lignes dans une page,
    - plus SQL Server doit lire de pages pour répondre à la requête,
    - moins ces pages peuvent rester longtemps dans le cache (<=> RAM),
    - plus SQL Server doit lire de pages depuis le disque,
    - plus vos temps de réponse sont mauvais puisqu'on estime qu'un accès en RAM est au moins 1000 fois plus rapide qu'un accès disque

    L'idée de créer plusieurs sous - tales est elle judicieuse ?
    Tout à fait parce que, comme vous le dites, seules 10 colonnes sont lues très souvent, mais surtout, lorsque vous lirez les tables, vous lirez seulement les données dont vous avez besoin, et par les contraintes d'intégrité (clés primaires et étrangères, contraintes d'unicité et de domaine), vous aurez une base de données très consistante et très souple.

    Vous ne pouvez faire cela qu'en réalisant un modèle conceptuel de données.
    Pour vous aider, vous pouvez commencer avec cet article de SQLPro

    Pour obtenir des temps de réponses encore meilleurs, il vous restera à étudier vos requêtes pour indexer vos tables.

    Pour vos requêtes, utilisez des procédures stockées : cela présente de nombreux avantages outre la réutilisation de plans et cela vous permettra de fournir une couche d'abstraction complète aux applications.

    Bref, vous avez du pain sur la planche.
    Bon courage

    @++

  3. #3
    Membre chevronné Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Par défaut Découper
    Bonjour,

    Au vu des éléments que vous nous donnez, il faut découper.

    Il faut différencier le problème de design de votre base, du problème de performance.

    Si cette base de données est pratiquement toujours accédée en lecture seule, un degré de dé normalisation élevé peut être utile.

    Si ce n'est pas le cas, il s'agit probablement d'une mauvaise conception
    qui va poser à terme des problèmes récurrents de maintenance, développement, compréhension, ...
    Donc si cette base de données et ses applicatifs sont encore
    amenés à vivre et à bouger un bout de temps, il me semble judicieux de la renormaliser.

    Les bénéfices sur les temps de développement sont à voir sur le terme.
    Et rien ne vous empêche de créer une vue en attendant pour minimiser l'impact (en lecture probablement)

    http://sqlpro.developpez.com/SGBDR/R...egles_codd.pdf

    Quant aux performances, SQL Serveur lit les données par page. Avec 10 informations utiles sur 130, de façon simpliste on est 13 fois plus
    lent qu'on ne pourrait l'être. Dans la réalité le gain ne sera pas de 13, mais il sera sans doute sensible.

    @+

  4. #4
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Billets dans le blog
    22
    Par défaut
    Pour commencer merci pour ces réponses et les liens.

    J'avais déjà lu l'article sur les index, qui est très intéressant et très bien expliqué.

    Merci pour les solutions procédures, et les vues je vais les étudier.

    En revanche j'aimerais avoir un plus d'informations sur les pages de données.
    En premier lieux pour mes connaissances, en second lieux pour répondre au futur questions de développeurs.

    Ou pourrais je trouver un article qui explique le fonctionnement de ces pages ?

    Merci par avance.

    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  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 999
    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 999
    Billets dans le blog
    6
    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/ * * * * *

  6. #6
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Billets dans le blog
    22
    Par défaut
    super cet article, il permet de comprendre énormément de chose.

    J'aurais encore quelques questions :

    - Les procédures stockées, j'ai lu une fois dans un article qu'elle était plus couteuse. elle effectue plus de lecture sur la base. je n'arrive pas a retrouver cet article.
    Est ce juste ? Y-a-t il des normes a respecter pour les optimiser ?

    - Les index, j'ai lu deux articles. Un premier sur les index, ou ils disent que lemieux c'est d'avoir un index couvrant, et le deuxième article dit que les index sur une colonne sont mieux pour éviter une forte fragmentation.
    Comment choisir la meilleur solution. Cela dépend t -il des cas ?

    Merci par avance
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    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 999
    Billets dans le blog
    6
    Par défaut
    - Les procédures stockées, j'ai lu une fois dans un article qu'elle était plus couteuse. elle effectue plus de lecture sur la base. je n'arrive pas a retrouver cet article.
    Est ce juste ? Y-a-t il des normes a respecter pour les optimiser ?
    Ceci est totalement faux et parfaitement stupide...
    Il n'y a rien de plus performant naturellement que les procédures stockées...
    Je vais faire paraître un article dans quelques mois consacré au développement pas de données épais qui montre bien que c'est grâce aux vues, aux triggers INSTEAD OF et aux procédures stockées que l'on peut obtenir les performances les plus extrême et de surcroit en diminuant le temps de développement d'une facteur de 2 à 4 !
    - Les index, j'ai lu deux articles. Un premier sur les index, ou ils disent que le mieux c'est d'avoir un index couvrant, et le deuxième article dit que les index sur une colonne sont mieux pour éviter une forte fragmentation.
    Comment choisir la meilleur solution. Cela dépend t -il des cas ?
    Il n'y a pas de meilleur index. Il y a des index adéquat pour répondre à une problématique précise.
    Il n'y a donc qu'une seule règle à suivre : mesurer l'impacte de l'indexation sur vos requête face à une vraie volumétrie.... pas quelques lignes mais quelques centaines de milliers voir plusieurs millions, bref, un volume proche de la réalité de ce que sera la base dans 3 à 5 ans....

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/07/2009, 19h23
  2. Compter le nombre de colonne dans une table
    Par Coin dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/12/2006, 16h03
  3. Réponses: 8
    Dernier message: 20/06/2005, 15h10
  4. recherche du nombre d'occurences dans une table
    Par berry dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/01/2004, 20h03
  5. Ajout d'une colonne dans une table ...
    Par Djedjeridoo dans le forum SQL
    Réponses: 2
    Dernier message: 22/07/2003, 16h12

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