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

Oracle Discussion :

Les index et les vues oracle


Sujet :

Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Les index et les vues oracle
    Bonjour,

    Je me pose pas mal de questions sur les interactions entre les vues (matérialisées ou non) et les index oracle.

    Mettons que l'on ait 2 tables : Personne et Activite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Table PERSONNE
    ID_PERSONNE number(10)
    NOM Varchar2(50)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Table ACTIVITE
    ID_ACTIVITE number(10)
    NOM Varchar2(50)
    ID_MANAGER number(10) (FK sur l'ID_PERSONNE)
    On souhaite une vue V_ACTIVITE qui intégre le nom en toute lettre du manager :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE OR REPLACE VIEW V_ACTIVITE (ID, ACTIVITE, MANAGER)
    AS
    SELECT ACTIVITE.ID_ACTIVITE, ACTIVITE.NOM, PERSONNE.NOM
    FROM ACTIVITE, PERSONNE
    WHERE ID_MANAGER=ID_PERSONNE
    Ensuite, je veux chercher toutes les activité dont le manager est 'robert' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from V_ACTIVITE where MANAGER='robert'
    Tout ce blabla pour en venir à ma question :
    Puis-je optimiser les perfs de cette recherche sur une vue en créant un index sur le nom du manager ?
    Il n'est apparement pas possible de créer un index sur la vue elle-même mais est-ce que la vue "bénéficierait" d'un index sur le champ NOM de la table PERSONNE ?
    Même question pour une vue matérialisée...

    Merci d'avance de vos réponses...

    Précisions : je suis en Oracle 10g

  2. #2
    Membre confirmé Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Points : 481
    Points
    481
    Par défaut
    Bonjour,
    Effectivement les index se crééent sur les tables. Les vues, qui ne sont ni plus ni moins que des requêtes et s'exécutent (sauf cas particuliers) avec le même plan, peuvent utiliser ces index.
    Dans le cas présent, créer un index sur le nom de la personne ne semble pas utile.

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    Citation Envoyé par chrifo
    Dans le cas présent, créer un index sur le nom de la personne ne semble pas utile.
    FAUX!

    le bon plan d'execution doit taper sur la table user en passant par un index sur le nom de la personne.

    Ensuite, il doit faire une nested loop sur la table ACTIVITE et utiliser l'index sur
    ID_MANAGER si celui-ci existe évidement!

  4. #4
    Membre confirmé Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Points : 481
    Points
    481
    Par défaut
    hum ... L'intérêt de passer par un index, pour une sélection (et non une jointure), sur cette table qui ne contient que ce champ en plus de la PK ne te parait pas limité ?


    Effectivement l'index sur ACTIVITE.ID_MANAGER est quant à lui vivement conseillé.

  5. #5
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par chrifo
    hum ... L'intérêt de passer par un index, pour une sélection (et non une jointure), sur cette table qui ne contient que ce champ en plus de la PK ne te parait pas limité ?


    Effectivement l'index sur ACTIVITE.ID_MANAGER est quant à lui vivement conseillé.
    J'ai grandement simplifié les table et la vue pour plus de clarté. Ma vue porte sur plusieures jointures et les tables sont autrement plus conséquentes (et il y a bien des index sur les ID et les FK) !!!

    En tout cas, vous semblez confirmer que les clauses where appliquées à une vue s'appuyent sur les index des tables "cachées" par la vue.

    Est-ce aussi le cas pour les vues matérialisées ?

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    Citation Envoyé par chrifo
    hum ... L'intérêt de passer par un index, pour une sélection (et non une jointure), sur cette table qui ne contient que ce champ en plus de la PK ne te parait pas limité ?

    Tu accèdes à la personne par le champs nom.
    Donc mettre un index sur ce champs ne me parait pas du tout limité!

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    Citation Envoyé par kariba
    Est-ce aussi le cas pour les vues matérialisées ?
    Pas du tout!
    Ta vue materialisée est une table à part entière.
    Pour une requete sur cette table, en général, les tables qui ont servis à la calculer ne te servent plus à rien.

  8. #8
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 121
    Points
    121
    Par défaut
    1) Les index sur créés sur les tables. Les vues ne sont qu'une autre représentation des données extraites des tables ...

    2) Théoriquement l'index sur le champ 'NOM' me semble justifié. Oracle créé automatiquement un index sur chaques primary key, mais dans la cas d'Aline, la recherche se fait par le nom de l'employé et pas par son ID.

    Je dis bien théoriquement, j'approuve l'index. Apres, pour les performance, tout dépend du nombre d'employés.

  9. #9
    Membre confirmé Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Points : 481
    Points
    481
    Par défaut
    Effectivement si la structure de la table est plus complexe que celle énoncée l'index sera certainement tout à fait justifié.


    Citation Envoyé par aline
    Tu accèdes à la personne par le champs nom.
    Donc mettre un index sur ce champs ne me parait pas du tout limité!
    Très théorique tout ça ... attention toutefois un index créé injustement sur des champs un peu larges d'une table avec beaucoup d'enregistrements peut te poser plus de problèmes qu'il n'optimise ta base (stockage, lenteur de mise à jour, ...)

  10. #10
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    Citation Envoyé par chrifo
    Effectivement si la structure de la table est plus complexe que celle énoncée l'index sera certainement tout à fait justifié.



    Très théorique tout ça ... attention toutefois un index créé injustement sur des champs un peu larges d'une table avec beaucoup d'enregistrements peut te poser plus de problèmes qu'il n'optimise ta base (stockage, lenteur de mise à jour, ...)

    Je vais finir par m'ennerver!
    Ne donne pas de mauvais conseils!
    Si ton applis fais des requêtes sur la colonne nom de ta table personne, celle-ci doit être indexé!
    Et les problème que tu mentionnes n'en sont pas.

    Le cas ou ta table nom comporte 3 personnes est ininteressant.

  11. #11
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par aline
    Pas du tout!
    Ta vue materialisée est une table à part entière.
    Pour une requete sur cette table, en général, les tables qui ont servis à la calculer ne te servent plus à rien.
    Merci pour ces infos Aline

    Je déduis de cette remarque 2 cas possibles :
    1. Il est possible de créer des index pointant vers une vue matérialisée (à la différence d'une vue simple)
    2. Tout accès à une vue matérialisée se fait en FULL SCAN


    Quelle est la bonne conclusion ? Le cas 1 ou le 2 ? (J'espère le 1)

  12. #12
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 224
    Points : 19 566
    Points
    19 566
    Billets dans le blog
    25
    Par défaut
    1, bien sûr

  13. #13
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    chrifo Attention à la pertinence des infos que vous donnez sur le forum

    Une table matérialisé à une consistence physique et occupe de la place ( en rapport avec la volumétrie des données ) sur les datafiles , et peut donc être indexé.

    Une vue simple n'a pas de consistence physique .

  14. #14
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci à tous de vos réponses.

    Je flag le topic comme résolu.....

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

Discussions similaires

  1. [Débutant][indexes]Trouver les indexes d'une table
    Par Gromitou dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 13/12/2005, 17h50
  2. Réponses: 2
    Dernier message: 21/07/2005, 12h05
  3. [DB2] Question sur les index et les vues
    Par ahoyeau dans le forum DB2
    Réponses: 1
    Dernier message: 14/03/2005, 08h30

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