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 :

Requete group by et index sur fonction


Sujet :

Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Requete group by et index sur fonction
    Salut à tous,

    J'ai la requete suivante qui retourne des doublons d'utilisateurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select max(uti_cod) code, upper(max(uti_nom)) nom, initcap(max(uti_pre)) prenom, substr(uti_dat_naissance, 7, 2) || '/' || substr(uti_dat_naissance, 5, 2) || '/' || substr(uti_dat_naissance, 1, 4) date_naissance, count(*) nb_doublon
    from utilisateur
    group by convert(upper(uti_nom), 'US7ASCII'), convert(upper(uti_pre), 'US7ASCII'), uti_dat_naissance
    having count(*) >= 2
    order by nom, prenom, date_naissance
    ... mais elle est très lente notamment à cause des converts.
    Alors j'ai voulu créer des index sur les fonction convert :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    create index idx_utilisateur_nom on utilisateur(convert(upper(uti_nom), 'US7ASCII'))
     
    create index idx_utilisateur_prenom on utilisateur(convert(upper(uti_pre), 'US7ASCII'))
    A l'exécution les index ne sont pas utilisés alors j'ai ajouté le hint suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select /*+ index(utilisateur idx_utilisateur_nom idx_utilisateur_prenom) */
    ...
    Mais rien à faire, elle toujours aussi lente !

    Quelqu'un pourrait-il m'aider ?

  2. #2
    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
    Si il n'y pas de clause WHERE les indexes n'aideront absolument pas... voir agraveront le phénoméne.

    Tu dois faire du tri sur disque alors essaye d'augmenter la PGA ou SORT_AREA_SIZE.

    PS : merci de respecter les régles du forum à l'avenir

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci de ta réponse et désolé pour le formatage de mon message, je ferai gaffe la prochaine choix, promis !

    Par contre ça ne fait pas avancer le chmilblic parce que je ne suis pas administrateur de la base et faire les manipulations dont tu as parlé ne sera pas possible.

    Si quelqu'un a un autre idée, peut-être ecrire la requête différemment, le but etant de ne pas prendre en compte les accents dans mon regroupement !

    Merci d'avance.

  4. #4
    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
    le SORT_AREA_SIZE peut éventuellement être modifié via ALTER SESSION... et désolé pour toi mais il n'y a probablement pas d'autres solutions... tu fais un tri sur du FULL SCAN, pour moi c'est clair, c'est uniquement sur le tri que tu pourras faire quelques choses

    Tu peux pas appeler le DBA ?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Bon bah, je dois me résigner alors !

    Je vais voir pour le ALTER SESSION ...

    Merci.

  6. #6
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Donc pour toi Fred, le problème c'est le tri et le volume de lignes, pas les fonctions de conversion ?
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  7. #7
    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
    à mon avis, le coût de conversion est négligeable... ça aurait été des appels de fonction OK, mais là ce sont des conversions "élémentaires"

  8. #8
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Ok, je note, c'est toujours intéressant à savoir...
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  9. #9
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Attention pour pouvoir utiliser une index sur une fonction il faut être en mode QUERY-REWRITE, sinon oracle ne dit rien mais n'utilise pas l'index...
    Après est-ce que ça va améliorer les group-by, moi il me semblais que oui puisque il trie par l'index.. mais ça se teste...

    To create a function-based index in your own schema on your own table, in addition to the prerequisites for creating a conventional index, you must have the QUERY REWRITE system privilege. To create the index in another schema or on another schema's table, you must have the GLOBAL QUERY REWRITE privilege. In both cases, the table owner must also have the EXECUTE object privilege on the function(s) used in the function-based index. In addition, in order for Oracle to use function-based indexes in queries, the QUERY_REWRITE_ENABLED parameter must be set to TRUE, and the QUERY_REWRITE_INTEGRITY parameter must be set to TRUSTED.

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/06/2008, 16h13
  2. Tuning requête et indexes sur fonction
    Par Mehdilis dans le forum Oracle
    Réponses: 3
    Dernier message: 26/02/2007, 13h36
  3. index sur fonction
    Par Spoutnik dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 03/05/2006, 16h18
  4. Réponses: 2
    Dernier message: 11/04/2006, 16h09
  5. [ORACLE 8i] Index sur des fonctions
    Par miloux32 dans le forum Oracle
    Réponses: 1
    Dernier message: 02/02/2006, 17h52

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