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 :

Index non utilisé sur une base


Sujet :

SQL Oracle

  1. #21
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2002
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2002
    Messages : 203
    Par défaut
    Si je vous montre la requete, vous prendriez peur
    C'est une requete générée par Hibernate.

    Bahh
    je vais laisser les developpeurs réfléchir plutot, car pour moi, c'est clairement un probleme de volumétrie.

    Petite question d'ailleur.

    Dans le plan d'execution, la colonne Row, elle correspond au nombre totale des data dans la table, ou dans l'indexe ? ou de l'estimate ?

  2. #22
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Hibernate il faut s'arrêter aux requêtes simples.

    Dès que c'est compliqué, vous mettez la requête dans une vue et vous appelez la vue.

  3. #23
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Citation Envoyé par pacmann Voir le message
    Si tu veux tenter les hints, c'est effectivement dans le select :
    /*+ use_nl(tablea, tableb) index(tableb tonindex*/
    Pour hinter, un exemple ici avec la manière précise de hinter les jointures.

    Mais la meilleure manière d'appliquer le plan d'exécution d'un environnement à un autre est de prendre le plan d'exécution avec le format '+OUTLINE' et récupérer les hints. Puis comme le précise Mohamed on compare les estimations.

    Citation Envoyé par Waldar Voir le message
    Hibernate il faut s'arrêter aux requêtes simples.
    Dès que c'est compliqué, vous mettez la requête dans une vue et vous appelez la vue.
    Attention, si on dit trop ça. Hibernate peut aussi envoyer un million de requêtes simples à la place - c'est pas mieux

    Cordialement,
    Franck.

  4. #24
    Membre expérimenté
    Avatar de ora_home
    Homme Profil pro
    Consultant Oracle
    Inscrit en
    Février 2009
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant Oracle
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 103
    Par défaut
    Citation Envoyé par Le-DOC Voir le message
    Dans le plan d'execution, la colonne Row, elle correspond au nombre totale des data dans la table, ou dans l'indexe ? ou de l'estimate ?
    La colonne ROW correspond au nombre d'enregistrements retournés dans l'opération.

  5. #25
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Citation Envoyé par Mohamed.Houri Voir le message
    J'avoue également que je n'ai pas bien saisi le rôle de l'inversion des colonnes de l'index dans ce cas où les deux colonnes sont utilisées dans la where clause et que les prédicats sur ces deux colonnes sont des égalités.
    Prenons un cas de 2 tables A (idA), B (idB), et une table de jointure C (idA, idB).

    Chaque table fait 10 millions de ligne, et il y a une jointure 1:1 entre A et B. Je fais une requête simple avec une restriction sur B qui filtre sur une seule ligne.

    Alors l'index (idA,idB) est peu intéressant :
    > Ou bien j'ouvre la table A, je fais une jointure avec l'index (10 millions de ligne), puis je joins B, et enfin je filtre pour me retrouver avec une seule ligne.
    > Ou bien je pars de B, je n'ai qu'une seule ligne, mais ensuite je doit parcourir tout mon index pour trouver la ligne correspondante ... j'ai donc du lire tout l'index !

    Au contraire, l'index (idB,idA) me permet de faire :
    > Je pars de B, je trouve la ligne qui correspondà mes filtres
    > J'utilise l'index pour en déduire idA (accès rapide par l'index)
    > Je récupère la ligne dans A.

    => Bien sûr, ici j'ai grossi le trait. Dans la réalité, on aurait des stats plus équilibrées, des filtres des deux côtés, mais qui ramèneraient 500k lignes d'un côté, et 50 de l'autre (et la combinaison des deux, 10 lignes).

    J'ai assez souvent, sur ces tables de jointures volumineuses, des index "croisés", (idA,idB) et (idB, idA).

  6. #26
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    (peut-être un peu hors sujet - ma réponse ne concerne que le dernier post)
    Citation Envoyé par Rei Ichido Voir le message
    J'ai assez souvent, sur ces tables de jointures volumineuses, des index "croisés", (idA,idB) et (idB, idA).
    Ca me paraît tout à fait normal d'avoir ces deux index pour une table d'association vu qu'il y a les 2 navigations possibles, même si ça revient à stocker 3 fois la même ligne, mais dans des ordres différents.
    On peut économiser le stockage de la table en créant une Index Organized table sur (idA,idB) et un index secondaire sur (idB, idA). C'est souvent un des cas idéal pour les IOT (car la clé primaire se trouve partout).
    Cordialement,
    Franck

  7. #27
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Par défaut
    @ Rei Ichido

    Le mieux c'est d'avoir un modèle sur lequel on peut discuter. Pour l'instant cela reste trop théorique et quelques subtilités peuvent apparaître lorsque vous vous exprimerez par le biais d’un exemple pratique.

Discussions similaires

  1. Index non utilisé dans une jointure
    Par lasyan3 dans le forum SQL
    Réponses: 15
    Dernier message: 12/04/2011, 09h06
  2. Index non utilisé dans une requête
    Par tibal dans le forum Administration
    Réponses: 9
    Dernier message: 10/05/2010, 15h29
  3. Pb d'index sur une base Access
    Par chakir dans le forum Bases de données
    Réponses: 1
    Dernier message: 09/03/2006, 12h24
  4. Connexion sur une base Mysql distante (non locale)
    Par externa dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 20/02/2006, 11h34
  5. Problème avec les indexes sur une base de données.
    Par osoudee dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 09/02/2006, 09h24

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