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

SQL Oracle Discussion :

Standard Edition - Vue dynamique Plan différent Requête Performance WHERE


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 43
    Par défaut Standard Edition - Vue dynamique Plan différent Requête Performance WHERE
    Bonjour,

    Je travaille sur une 11gR2 11.2.0.4 standard et j'ai un soucis de performance entre une vue PLUS une clause where et la requête de cette vue avec la même clause where.

    La vue est complexe, je vais donc choisir de prendre un exemple très simplifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create view vEmp as select * from employees;
    Dans le premier cas la requête d'origine avec clause WHERE va durer 0.005 secondes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from employees where affectation = 'COMPTA';
    Dans le second cas la requête sur la vue avec clause WHERE va durer 3 secondes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from vEmp where affectation = 'COMPTA';
    Ces 3 secondes représentent le temps d'exécution de la requête où la vue sans clause WHERE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from employees;
    select * from vEmp;
    Y a-t-il des paramètres Oracle qui pourraient à la manière du query rewrite sur les VM faire la même action sur les vues dynamiques ?

    Je ne peux créer de VM
    La clause WHERE est amenée dynamiquement par un programme Java, elle change en fonction des champs remplis par le client.

    Merci.

    Bien cordialement,
    Laurent

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Il faut regarder l'explain plan, pour voir ce qui se passe.

    Attention avec les vues, on oublie vite ce que ça fait quand on les utilise. Plus la vue est complexe, plus les accès deviennent compliqués.

    Pour info un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from vEmp where affectation='COMPTA'
    est l'équivalent de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from (select * from employees) where affectation='COMPTA';

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 43
    Par défaut
    Merci pour cette réponse.

    Les plans d'exécution sont les mêmes lorsque je lance :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from employees;
    select * from vEmp;
    par contre avec une clause WHERE simple telle que "affectation='COMPTA'" dans le cas de l'interrogation des tables directement mon plan se transforme et j'obtiens une requête qui renvoie des données en 0.003s avec un poids de plan très faible, et avec la vue le poids du plan reste le même et le temps est toujours d'environ 3s.

    Je sais qu'avec une VM et le query rewrite activé Oracle réécrit le plan d'exécution, ma question est de savoir s'il est possible de faire la même chose avec une vue dynamique ou s'il est obligatoire de poser manuellement un plan.

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/07/2014, 16h32
  2. Plan de requête différent : MSSQL7
    Par lmalta dans le forum Développement
    Réponses: 2
    Dernier message: 17/06/2009, 14h24
  3. Réponses: 2
    Dernier message: 21/12/2004, 15h28
  4. Creation d'une vue dynamique ?
    Par Simeans2004 dans le forum Administration
    Réponses: 5
    Dernier message: 01/07/2004, 15h25
  5. [Plugin] Création d'une vue dynamiquement
    Par The Bonze dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 15/06/2004, 13h23

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