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 :

Comment faciliter l'utilisation d'une table lourde ?


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de mohe27
    Inscrit en
    Février 2007
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 112
    Par défaut Comment faciliter l'utilisation d'une table lourde ?
    bonjour à tous,

    voilà au boulot je dispose d'une table appelée 'TblClient' au niveau d'un serveur Sql contenant pas mal de colonnes intitulé comme suit:
    -ID (numero sequentiel autoincement)
    -Nomclient
    -NumTel
    -Articlecommande
    -Quantite
    -DateCommande


    cette table est alimentée au quotidien avec des informations concernant quelques 35000 clients ce qui fait qu'au bout du mois je me retrouve avec pratiquement 1 Million d'enregistrements. cette table sert aussi à dresser des tableaux de bord pour détailler l'activité commerciale avec chiffres (quantité commandée/ quel article marche le plus /.....) ce qui implique des calculs par client et par période donnée (se référer à la DateCommande). évidement ces tableaux sont dressés à partir de feuilles Excel avec connexion ODBC sur le serveurSql.

    actuellement et après quelque mois de mise ne place de cette table, cette dernière contient à peu prêt 6 Millions d'enregistrements dont les dits calculs cités plus haut deviennent très lourds dessus parfois impossible d'où la nécessité de trouver une solution pour la rendre plus fluide.

    j'ai entendu parler de partitionnement de table ou bien Clustered Index mais je ne sais pas si la solution à celà se trouve dans ces concepts ou pas, si oui comment m'y prendre et sinon si possible de m'aider à résoudre ce souci de lourdeur compte tenu de l'énorme quantité de donnée à calculer et à afficher via Excel.

    en attente de vos avis là-dessus.

    merci les amis

  2. #2
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Pour les calculs d'agregats (count etc...) une solution peut être une vue indexée...

    Postez votre modèle complet en rapport avec cette table car celui ci ne me parait pas correct (n'avez vous pas un table commande en plus de votre table client? etc.)

  3. #3
    Membre confirmé Avatar de mohe27
    Inscrit en
    Février 2007
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 112
    Par défaut
    bonjour iberserk,

    merci pour ton retour, en fait le modèle est comme tel, c'est à dire qu'il y a une seule table contenant toutes ces informations et non pas deux comme vous venez de supposer (table commande + table Client avec clef étrangère).

    l'information est brute c'est à dire qu'elle est récupérée puis injectées telle qu'elle est dans la table 'TblClient'.

    sinon par rapport à la vue indexée comment puis-je la mettre en place, c'est vrai que j'ai une vue dans laquelle j'ai tous les calculs 'count, sum' seulement pour l'indexer je ne vois pas comment et sur quelle critère mettre cet index !!!

    merci de m'éclairer la dessus

    cdt

  4. #4
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Commencez par revoir votre modèle en le normalisant... vous verrez que la volumétrie baissera d'elle même car vous supprimerez les redondances...

    Actuellement vous répetez autant de fois qu'il ya de lignes dans votre table:
    lenom du client,le telephone, la date de la commande.

    Faites quatres tables:

    Une table client avec ID,tel et nom.
    Une table commande avec IDcommande, date et Idclient.
    Une table produit (id produit et ce que vous voulez avec, nom,désignation,ref,code barre etc...).

    Enfin une table d'association entre votre commande et les produits.

    Vous vous retrouvez avec 3 petites tables sans redondances et une tables contenant d'avantage de ligne mais extremement petite puisqu'uniquement composée de 3 colonnes:

    IdCommande.(entier)-> 4 octets
    IdProduit. (entier)->4 octets
    Quantite (smallint)->2 octets

    En gros une dizaine d'octets par lignes... vous pouvez voir venir...

    Pour comparaison vous avez actuellement au moins 40 octets par lignes avec votre 'modèle'...

  5. #5
    Membre confirmé Avatar de mohe27
    Inscrit en
    Février 2007
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 112
    Par défaut
    Merci beaucoup iberserk,

    je vais suivre votre conseil et voir comment fragmenter cette information selon vos recommandations.

    je sais que ça ne vas pas être facile mais faisable.

    une fois cette architecture mise sur pied, recourir à la vue indexées sera necessaire lui aussi ??

    merci

  6. #6
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Une vue indexée prend tout son intérêt lorsque vous effectuez des calculs d’agrégats (COUNT...) donc oui elle peut-être une piste à étudier...
    Mais il faut garder à l'esprit que SQL SERVER devra maintenir à jour cette vue indexée et impliquera donc un surcoût lors des opérations d'insertions/mise à jour/suppressions.

Discussions similaires

  1. Réponses: 17
    Dernier message: 18/03/2005, 15h56
  2. comment verifier l'appartenance a une table?
    Par raul83 dans le forum Access
    Réponses: 7
    Dernier message: 11/10/2004, 16h07
  3. comment effacer le contenu d'une table ttable
    Par naw dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/07/2004, 16h13
  4. Comment stocker un ficher dans une table postgres
    Par josoft dans le forum Requêtes
    Réponses: 3
    Dernier message: 23/06/2003, 16h41

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