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 :

Utilité des index et mesure de performances


Sujet :

SQL Oracle

  1. #1
    bruce-willis
    Invité(e)
    Par défaut Utilité des index et mesure de performances
    Bonjour,

    On dit qu'un index est un objet complémentaire de la BD (ne faisant pas partie du standard de SQL) mais qui n'est pas indispensable, on peut s'en passer
    Mais si je tiens compte que ça permet d'indexer donc ça accélère les recherches (par ex, la condition WHERE non ?)
    Ce que je sais c'est que ça prend seulement un espace mémoire de plus

    Donc, en quoi les index peuvent-ils ralentir le traitement alors ? Pourquoi un index est considéré comme un objet, n'est-ce pas une technique ?
    Quand est-ce qu'on utilise un index ? Quand on a à faire à une table qui contiendra des milliers de valeurs ??
    Je pense que l'index est utile pour une table qui sera beacoup SELECTée non ?

    Bon, je trêve de bavardage, donc pour la mesure de performances, que fais TopSQL par ex ??

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252

  3. #3
    bruce-willis
    Invité(e)
    Par défaut
    Merci pour le lien mais je ne suis pas tellement avec la documentation d'Oracle, n'y a-t-il pas de doc sur developpez.com, j'ai beau cherché mais rien

    En lisant ce lien, ça a encore grandi mon incompréhension: que contient un index?
    Indexes are optional structures associated with tables and clusters.
    C'est quoi cluster ?

  4. #4
    bruce-willis
    Invité(e)
    Par défaut
    Pour le cluster, je retire la question car answer = http://fadace.developpez.com/sgbdcmp/cluster/, c'est encore une technologie en plus des indexes

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2006
    Messages : 139
    Points : 152
    Points
    152
    Par défaut
    bonsoir,
    effectivement la doc Oracle est ton meilleur ami.

    Un index est un objet de la base de donnée qui prend physiquement de la place car il contient une partie des données de la table. Plus la table est grosse, plus un index sera gros. Un index peut s'imaginer comme l'index d'un livre: pour chercher une reference soit on lit le livre en entier,soit on passe par l'index pour acceder directement à l'info. Un index de PK contient toutes les valeurs de la PK rangées "intelligemment"(B-TREE) et le rowid de la ligne dans la table. Grossierement si le where porte sur la pk, une lecture de l'index est faite plutot que la table soit avec un range scan(une plage de valeur est ramenée) soit ,bingo, avec un unique acces (une seule valeur ramenée). Une fois qu'on a ce/ces valeurs, on accede la table via le rowid et on recuperer toutes les colonnes de la table.

    Pour te convaincre qu'un index contient une partie dupliquee des tables, tu peux faire une requete ne portant unique sur des colonnes indexées:
    table t(a,b,c,d) avec index sur a et c. -> select a from t where c=:v
    un explain plan sur cette requete montre qu'il n'y a pas d'acces à la table.

    Cdt

  6. #6
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    C'est très clair

    Juste une précision, pour qu'un index soit bien utilisé, il faut calculer les statistiques sur la table afin de permettre à l'optimiseur de choisir le plan d'exécution adéquat en fonction de la volumétrie, la sélectivité et les performances d'un index

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 43
    Points : 38
    Points
    38
    Par défaut
    Slt!
    kervoaz et orafrance ont ete max; juste une pincé de sel.
    Un index est comme une fraction de la table qu'il reference.
    Il est utilisé pour faciliter la recherche (SELECT + WHERE et non un SELECT sans WHERE)
    Et donc lorsque la table est très volumineuse son parcours necessitera de nombreux accès disque.
    Pour eviter cela, on fait recours à son index (qui est une fraction de la table en terme de volume egalement): son parcours est plus simple en accès disque.
    Une fois les enregistrements concernés repérés, on procède à un accès direct sur la table pour les recuperer (non plus à un parcours séquentiel).
    NB: Il y a des circontances où les index n'ont aucune importance, au contraire ils peuvent nuire. D'où l'utilité de l'optimiseur dont parlait orafrance.
    A+

  8. #8
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par nwaitic Voir le message
    ...
    Il est utilisé pour faciliter la recherche (SELECT + WHERE et non un SELECT sans WHERE)
    ...
    Il y a beaucoup de chose à dire et surtout à lire sur les indexes.
    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
     
    SQL> set autotrace traceonly explain
    SQL> Select * from emp
    order by empno  2  ;
     
    Plan d'exécution
    ----------------------------------------------------------
       0      SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=83 Card=409 Byte
              s=35583)
     
       1    0   TABLE ACCESS (BY INDEX ROWID) OF 'EMP' (Cost=83 Card=409 B
              ytes=35583)
     
       2    1     INDEX (FULL SCAN) OF 'PK_EMP' (UNIQUE) (Cost=26 Card=409
              )

  9. #9
    bruce-willis
    Invité(e)
    Par défaut
    Pour te convaincre qu'un index contient une partie dupliquee des tables, tu peux faire une requete ne portant unique sur des colonnes indexées:
    table t(a,b,c,d) avec index sur a et c. -> select a from t where c=:v
    un explain plan sur cette requete montre qu'il n'y a pas d'acces à la table
    Là c'est clair

    Le truc est donc de savoir les utiliser et avoir une RAM spacieuse !!!

Discussions similaires

  1. Utilité des index
    Par bouchra19 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 17/04/2012, 11h48
  2. performance des index sur une requete
    Par Invité dans le forum SQL
    Réponses: 2
    Dernier message: 27/04/2010, 20h29
  3. [MySQL] utilité d'indexation des tableaux
    Par fraisa1985 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 10/07/2008, 13h46
  4. utilité des index
    Par gforce dans le forum Requêtes
    Réponses: 5
    Dernier message: 13/04/2006, 15h08
  5. [POSTGRESQL] Utilité des index ?
    Par mic79 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/04/2006, 14h19

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