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

Vue indexée ?


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Par défaut Vue indexée ?
    Bonjour,

    J'entends souvent parlé des vues indexées, sans vraiment comprendre comment cela fonctionne. Quelqu'un peux t il m'expliquer ou me donner l'url d'un site ou est expliqué le pourquoi du comment des vues indexées ?
    J'utilise SQL Seveur 2005.

    Merci pour votre aide

    Arnaud

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Par défaut
    Bonjour,

    les vues indexées peuvent être intéressantes pour matérialiser les données résultantes de l'exécution d'une vue, permettant de ne pas à avoir à ré-exécuter le code de la vue à chaque fois.

    en anglais : http://msdn.microsoft.com/en-us/libr...4(SQL.90).aspx
    ou en français :
    http://msdn.microsoft.com/fr-fr/libr...4(SQL.90).aspx

  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
    21 998
    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 998
    Billets dans le blog
    6
    Par défaut
    Pour une application intéressante et démonstrative du concept, lisez l'article que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/optimisation/indexation/

    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
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Par défaut
    Merci pour ces infos ...

    Je me rend compte à la suite de la lecture de cet article & quel test rapide que je complique la vie ... aujourd'hui j'ai un modele de données avec un table de fait de plusieurs millions de lignes qui n'est pas requetable en direct pour mon application web frontale (trop long) : j'ai donc creer plusieurs table que j'update toutes les nuits avec les nouvelles lignes en faisant les group qui vont bien pour avoir des réponses rapides sur l'application frontale ... l'utilisation de vues indexées me semble approprié dans ce genre de cas ....

    J'ai une question concernants les insert update, comment cela se passe ? A chaque mise a jour de ma table de fait, les index des vues sont recalculés ? Ce qui doit prendre un temps considérable ? Quelle est la bonne méthode, desactivation / reactivation des index avant/apres chaque update / insert ?
    A t il d'autres choses a savoir sur la maintenance de ce type d'index ?

    merci pour votre aide

    arnaud

  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 998
    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 998
    Billets dans le blog
    6
    Par défaut
    j'ai donc creer plusieurs table que j'update toutes les nuits avec les nouvelles lignes en faisant les group qui vont bien pour avoir des réponses rapides sur l'application frontale ...
    Ca c'est ce qu'il y a de pire !
    Si vous avez des temps de réponse anormaux c'est que vous n'avez pas posé les bons index !
    J'ai une question concernants les insert update, comment cela se passe ? A chaque mise a jour de ma table de fait, les index des vues sont recalculés ? Ce qui doit prendre un temps considérable ?
    Non les index ne sont pas recalculés en totalité, mais seulement pour leur delta. et cela ne prend donc que très peu de temps !

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

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Par défaut
    Merci pour ces infos.

    Par contre je constate que l'on ne peut pas faire de left join si je veux indéxer ma vue ? Uniquement les inner join sont autorisés ?

    merci
    arnaud

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 5
    Par défaut
    Bonjour,

    je ressort un vieux post qui m'a permis d'obtenir des infos sur un thème qui m'intéressait, les "vues indexées".

    J'ai lu avec attention l'étude d'indexation (écrite par SQLPro) et j'ai mis en pratique l'exemple.
    Malheureusement, j'ai un résultat qui diffère sur justement la partie "Création d'une vue indexée".

    En exécutant la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select nombre, sexe
    from V_EMP_SSC
    where service='RH'
    Au lieu d'obtenir le message :
    Table 'V_EMP_SSC' ... logical reads 2 ...

    J'ai cela comme message :
    Table 'Worktable'. ... lectures logiques 0 ...
    Table 'T_EMPLOYEE_EMP'. Nombre d'analyses 3, lectures logiques 35460, ...

    Pourquoi n'est-ce pas le nom de la vue qui s'affiche ?

    Avez-vous une idée de la raison du problème ?
    Pour info, j'utilise SQL Server 2005 SP2.

    Merci par avance,
    Laurent

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    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 998
    Billets dans le blog
    6
    Par défaut
    Tout dépend de votre version de SQL Server.
    La substitution automatique des tables aux vues n'est opérationnelle que dans les versions DEVELOPPER et ENTERPRISE. SI vous êtes en version standard, web, ou Express, cette fonctionnalité n'est pas prise en charge. Néanmoins vous pouvez utiliser directement ces vues indexées.

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

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 5
    Par défaut
    J'utilise pour l'instant SQL-Server 2005 Standard.

    Donc, dois-je déduire de votre réponse que les vues indexées sont utilisables, mais que je ne profite pas de cette évolution en terme de performances ???

    Et que si je veux en bénéficier, il me faut obligatoirement migrer vers une des 2 versions Developper ou Entreprise !!

    Merci en tout cas,
    Laurent

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    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 998
    Billets dans le blog
    6
    Par défaut
    Developper étant fait pour développer et enterprise pour produire.

    Comprenez que, comme dans le cas de l'indexation online, du recalcul des stats asynchrone, du partitionnement.... la substitution automatique des vues indexées produit des plans de requêtes très complexes et donc un effort de calcul important qu'une petite version (monoproc avec 2 Go de RAM par exemple) ne serait pas à même de produire sainement.
    En fait, les résultats pourrait même être inverse : le système passerait trop de temps à ces calculs au détriment de la "vraie" production.
    C'est pourquoi ce genre de fonctionnalité est réservée à de grosses base et donc de gros serveur (au moins quadri proc avec 32 Go de RAM...)

    Par exemple quand je voit des développeurs sauter à pied joint sur le partitionnement de tables dans MySQL je me dit que nous avons encore de très beaux jours en tant que conseil. En effet, faire du partitionnement de table, n'a de réel intérêt que si une table dépasse la capacité d'un disque du serveur, ce que MySQL par ses limitation est incapable de faire. Cependant les plans de requêtes ainsi que les couts de ces requêtes sont nettement augmenté par cette disposition !
    Heureusement que cela est impossible sur la version standard de SQL Sevrer !

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

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 5
    Par défaut
    Merci bien pour les conseils.

    Je ne suis effectivement pas dans la catégorie des "grosses BDDs" et "gros serveurs".

    Serveur bi-proc avec 4 Go de RAM (seulement)
    La table principale comporte environ 60 millions de lignes.
    La base fait environ 80 Go

    En fait, je cherchais une solution pour accélérer mes requêtes.
    J'ai constaté la semaine dernière que si je faisais une simple requête SELECT COUNT(*) directement sur la table source, j'obtenais le résultat en 1 à 2 secondes.
    Mais lorsque je faisais la même requête par le biais d'une simple vue de cette table, le résultat sortait en 4min environ.

    Initialement, j'avais mis en place des vues pour renommer les champs et surtout pour être moins dépendant de la structure de base de la BDD pour laquelle je n'ai pas de maitrise.
    Notre fournisseur de logiciel/BDD est libre de modifier la base à sa convenance et vu que j'accède à leur données via un outil de reporting, je ne voulais pas avoir à tout reconfigurer les états à chaque changement de structure de BDD.
    D'où l'explication pour les vues.

    Du coup, j'explore tout ce qui me semble être une bonne solution.

Discussions similaires

  1. Vue indexée et jointures externes
    Par elsuket dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/06/2009, 23h32
  2. Vue indexée sur deux bases de donnée
    Par mochi dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/12/2008, 12h20
  3. Vue indexée & Date ?
    Par xpander dans le forum Développement
    Réponses: 0
    Dernier message: 09/10/2008, 18h30
  4. [Debutant]Problème de création d'une vue indexée
    Par Le Pharaon dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/11/2006, 12h50
  5. Vue indexée
    Par krest dans le forum Oracle
    Réponses: 7
    Dernier message: 10/04/2006, 08h54

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