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 :

TRIGGER sur une vue


Sujet :

Développement SQL Server

  1. #1
    Membre habitué
    Homme Profil pro
    Architecte technique
    Inscrit en
    février 2004
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Service public

    Informations forums :
    Inscription : février 2004
    Messages : 421
    Points : 198
    Points
    198
    Par défaut TRIGGER sur une vue
    Bonjour à tous,

    J'ai développer une vue qui mets un peu de temps à afficher les résultats consolidés, et je ne peux pas faire de vue indexée parce que j'utilise le mot clé MAX.

    Pour améliorer les performances de SELECT sur ma vue je souhaite donc la basculer en une table indexée.

    Ma première intention, intégrer un mécanisme dans mon applicatif pour gérer cette nouvelle table mais si j'utilise une vue c'est justement pour ne pas avoir à le faire parce que c'est plus compliqué.

    Ma deuxième intention serait de créer un trigger sur la vue qui mettrait à jour cette nouvelle table, mais j'ignore si c'est une bonne idée et comment le faire. Dans l'idée à l'insertion d'une ligne il faudrait la récpliquer dans la table, et à la modification d'une ligne il faudrait la modifier dans la table.

    Qu'en pensez vous ?

  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
    20 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 20 473
    Points : 48 328
    Points
    48 328
    Par défaut
    Tout déped de la complexité de la vue. La question étant ne pouvez vous pas séparer la partie non MAX du max s'il existe d'autres calculs d'agrégats ?

    Bref, le code intégral de la vue serait bien vu... !

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

  3. #3
    Membre habitué
    Homme Profil pro
    Architecte technique
    Inscrit en
    février 2004
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Service public

    Informations forums :
    Inscription : février 2004
    Messages : 421
    Points : 198
    Points
    198
    Par défaut
    Voici le code de la vue, à l'heure actuelle il n'y a pas vraiment de solution pour dissocier le MAX.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    CREATE VIEW xxxxxxxx
    AS
       SELECT crb.compteur_id,
              crb.type_pt_id,
              min (crb.datepoint)
                 AS dtmin,
              max (crb.datepoint)
                 AS dtmax,
              count (*)
                 AS [count],
              max (version)
                 AS maxversion,
              (SELECT TOP 1 datepoint
               FROM codap.gtm_crb10mn
               WHERE version = max (crb.version) AND type_pt_id = crb.type_pt_id)
                 AS dtmaxversion,
              max (crb.dateversion)
                 AS dtlastupdate
       FROM xxxxxxx
       where crb.version =
                 (SELECT max (crb2.version)
                  FROM xxxxxxx
                  WHERE     crb2.datepoint = crb.datepoint
                        AND crb2.type_pt_id = crb.type_pt_id
                        AND crb2.compteur_id = crb.compteur_id)
       GROUP BY crb.type_pt_id, crb.compteur_id

  4. #4
    Rédacteur
    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    20 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 20 473
    Points : 48 328
    Points
    48 328
    Par défaut
    Ton COUT est obligé de lire toutes les pages, mais pas tes MAX. Du coup la dissociation peut s'avérer pertinente.
    Par contre je pense que ceci n'est pas bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TOP 1 datepoint
    FROM codap.gtm_crb10mn
    WHERE version = max (crb.version) AND type_pt_id = crb.type_pt_id
    A moin qu'il ne retourne qu'une seule ligne donc le TOP est inutile...

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

  5. #5
    Membre habitué
    Homme Profil pro
    Architecte technique
    Inscrit en
    février 2004
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Service public

    Informations forums :
    Inscription : février 2004
    Messages : 421
    Points : 198
    Points
    198
    Par défaut
    Cette requête peut ramener plusieurs lignes, mais je veux que la 1ère, d'ou le TOP 1 !
    Ou est ce que ça semble faux ?

  6. #6
    Expert éminent Avatar de 7gyY9w1ZY6ySRgPeaefZ
    Homme Profil pro
    dba
    Inscrit en
    juillet 2007
    Messages
    5 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : juillet 2007
    Messages : 5 092
    Points : 7 080
    Points
    7 080
    Par défaut
    Citation Envoyé par Pfeffer Voir le message
    Cette requête peut ramener plusieurs lignes, mais je veux que la 1ère, d'ou le TOP 1 ! Ou est ce que ça semble faux ?
    Si tu veux la « première » ligne, ça prendrait un order by avec le top 1

  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
    20 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 20 473
    Points : 48 328
    Points
    48 328
    Par défaut
    Citation Envoyé par Pfeffer Voir le message
    Cette requête peut ramener plusieurs lignes, mais je veux que la 1ère, d'ou le TOP 1 !
    Ou est ce que ça semble faux ?
    TOP 1 prendra la première ligne s'il y a un ORDER BY sinon c'est n'importe quelle ligne au hasard ! Vu qu'il n'existe aucun ordre des lignes dans les tables...

    De plus s'il y a des ex æquo TOP 1 peut poser des problèmes...

    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. Trigger sur une vue pour remplir des clé secondaires
    Par SIGCMC56 dans le forum Requêtes
    Réponses: 8
    Dernier message: 31/07/2018, 11h34
  2. mySql : trigger sur une vue qui référence plusieurs tables
    Par charlesS dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 23/02/2012, 15h50
  3. trigger sur une vue sur sqlserver 2005
    Par thor76160 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 07/03/2009, 12h41
  4. [MSSQL05] Archivage de données, trigger sur une vue
    Par tamiii dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/07/2008, 14h54
  5. TRIGGER sur une vue
    Par islamune9 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/09/2007, 18h32

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