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 :

[SQL SERVER 2000] Gestion des droits, vues ou fonction et performances


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 132
    Par défaut [SQL SERVER 2000] Gestion des droits, vues ou fonction et performances
    Bonjour,

    Je suis novice avec SQL Server et j'aurais une petite question concernant les performances d'une idée ...

    J'ai une table TOTO, contenant beaucoup d'enregistrements.
    Chaque enregistrement de la table TOTO possède 2 champs de "droit".

    J'ai également une table UTILISATEUR, contenant mes utilisateurs et je peux, avec d'autres tables récupérer les 2 champs de droit.

    Je souhaites récupérer, pour un utilisateur, l'ensemble de ses données TOTO (restreint avec 1 des 2 champs "droit").

    Je pensais faire une vue utilisant toutes les tables avec les liaisons.
    Le nombre d'enregistrement de cette vue serait la somme des utilisateurs - TOTO.
    C'est à dire qu'elle contiendrait autant d'enregistrement que j'ai de liaison utilisateur - TOTO.

    Ensuite, lorsque je ferais une requetes, j'aurais juste a faire un where ID_utilisateur = 127.

    Seulement j'ai un peu peur sur les performances.
    SQL Server construit il d'abord l'intégralité de la vue avant d'appliquer le where ou part il du where pour construire les données de la vue ?


    Sinon, je pensais peut etre faire une fonction me renvoyant des tuples (en supposant que c'est possible).


    En espérant que vous aurez pu me comprendre, quelqu'un aurait il un avis, une solution ?

    Merci d'avance
    Worldofdada

  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
    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
    une seule requete sera toujours 10, 100 ou 1000 fois plis rapide que tout qutre code.

    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 confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 132
    Par défaut
    Imaginons que j'ai une table CLIENT.
    Un utilisateur connecté peut voir certains clients, par rapport a ses restrictions.

    Si je fais une vue vClient, j'aurais en contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    idClient1   nomClient1   adresseClient1   utilisateur1
    idClient2   nomClient2   adresseClient2   utilisateur1
    idClient3   nomClient3   adresseClient3   utilisateur1
    idClient1   nomClient1   adresseClient1   utilisateur2
    idClient2   nomClient2   adresseClient2   utilisateur2
    idClient2   nomClient2   adresseClient2   utilisateur3
    Le nombre d'enregistrements de cette vue sera la somme de tous les clients visibles pour tous les clients.

    Si l'utilisateur 1 se connecte, il me reste plus qu'a appeler la vue avec un WHERE utilisateur = utilisateur1.

    Pour ce cas de figure, ma question est :
    SQL Server va t'il reconstruire intégralement la vue avant d'appliquer le where ?
    Ou le construction de la vue va directement tenir compte de mon where ?


    Car dans le 1er cas, SQL Server va devoir construire une vue de plusieurs centaines de milliers d'enregistrements.
    Dans le 2eme cas, il ne construit la vue avec seulement mes 3 enregistrements.

    Savez vous comment fonctionne SQL Server afin de savoir si cette méthode est viable ou non ?
    En gros, puis je utiliser cette méthode, où dois je faire une seule requete (la vue me permet de décomposer cette meme requete en 2 petites) ?

    Merci

  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
    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
    Revisez vos cours ou apprenez SQL, il n'y a pas de donnees dans une vue !

    Que vous fassiez une requete directe ou une vue, c'est la meme chose. Les donnes sont dans les tables et nulle part ailleurs !

    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 confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 132
    Par défaut
    Je pense que tu ne comprends pas du tout ma question.

    Je sais très bien qu'il n'y a aucune donnée dans une vue.
    Ma question n'a rien a voir avec du SQL mais uniquement avec SQL Server.
    Je ne demande pas comment faire, je demande simplement la méthode de fonctionnement de SQL Server.

    Quand on appelle, dans une requete, une vue : SQL Server CONSTRUIT la vue (j'ai bien dit construit, et pas rempli)

    En admettant avoir une vue nommé vCLIENT_RECENTS.
    La vue contient tous les clients ajoutés il y a moins de n jours.

    Si je fais SELECT * FROM vCLIENT_RECENTS WHERE ID_Client = 5 :
    1 - est ce que la vue va etre CONSTRUITE avec tous les enregistrements de la vue PUIS filtrée avec la contrainte ID_client = 5 ?
    2 - est ce que la vue va etre directement CONSTRUITE avec la contrainte ID_client = 5 ?

    Mon exemple est stupide mais ce n'est pas la question posée.
    C'est un exemple, et ca n'a rien avoir avec mon cas d'utilisation.

    C'est une question sur les performances de SQL Server, pas sur du SQL.

    Encore merci
    Worldofdada

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 132
    Par défaut
    J'ai fais un test mais j'ai pas vu de réelle différence ... mais j'étais en local.

    Quelqu'un n'a pas de réponse ?
    Merci

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

Discussions similaires

  1. SQL Server 2005 - Gestion des droits
    Par nin33 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/11/2008, 21h15
  2. [SQL Server 2000] Source ODBC - Droits utilisateurs
    Par Invité dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/04/2008, 09h41
  3. Réponses: 5
    Dernier message: 30/05/2007, 18h08
  4. SQL Server 2005 gestion des priorités
    Par snouille dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/11/2006, 14h13
  5. Réponses: 9
    Dernier message: 28/07/2006, 17h38

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