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 :

[SQL tuning] problème d'utilisation d'index


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 32
    Points : 28
    Points
    28
    Par défaut [SQL tuning] problème d'utilisation d'index
    Bonjour,

    J'ai une table activite sur laquelle j'ai 2 indexes :

    • Indexe Unique PK_ACTIVITE sur le champ ID (PK)
    • indexe IDX_ACTIVITE sur les champs produit,id_client,date_livraison


    J'effectue la query suivante et demande un explain_plan :

    select a.id_client ID, a.produit PROD, to_char(a.date_livraison,'DD/MM/YYYY') LIVRAISON, a.quantite QUANT,from activite a where lower(a.produit) like '%a%'

    J'obtiens un TABLE ACCESS FULL SCAN (et ce même si je spécifie un hint).

    Je remplace le like par = et indique la chaîne exacte et là l'explain_plan indique bien une utilisation de l'index.

    Je comprends pas le problème, qq un pourrait m'expliquer pq?

    Merci d'avance.

  2. #2
    Membre habitué Avatar de Loyd1974
    Profil pro
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Points : 196
    Points
    196
    Par défaut
    Ton index est sur le champ PRODUIT et pas sur LOWER(PRODUIT)
    L'utilisation d'une fonction sur une colonne indexée empêche l'utilisation de l'index

    2 solutions, tu fais porter la fonction sur le paramètre et non sur l'index :
    Facile dans le cas suivant :
    TO_CHAR(COL_DATE,'DDMMYY') = PARAM (pas bien)
    il faut faire
    COL_DATE = TO_DATE(PARAM,'DDMMYY') (mieux)

    Dans ton cas, soit tu es sur que la casse de ton champ PRODUIT est la même tout le temps et dans ce cas là, tu fais PRODUIT = UPPER(PARAM) par exemple, sinon, il faut que tu créés un index de function en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create index IDX_ACTIVITE_FUNC ON ACTIVITE (LOWER(Produit,...)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 32
    Points : 28
    Points
    28
    Par défaut
    Merci, ça fonctionne très bien. Je ne savais pas que l'utilisation de fonction sur des colonnes indexées empêchais l'utilisation de l'index.

    Je vais maintenant essayer tout ça avec des jointures ...

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

Discussions similaires

  1. SQL Server 2005 et utilisation des indexes ou autres
    Par orafrance dans le forum Développement
    Réponses: 3
    Dernier message: 02/09/2010, 09h10
  2. Réponses: 7
    Dernier message: 08/02/2008, 10h35
  3. [Oracle 8.1.7.2] Problème d'utilisation d'index
    Par deldin dans le forum Administration
    Réponses: 11
    Dernier message: 16/04/2007, 21h37
  4. [TUNING] pb non utilisation de l'index
    Par ruthene dans le forum Oracle
    Réponses: 10
    Dernier message: 13/04/2006, 17h02
  5. Réponses: 1
    Dernier message: 01/03/2005, 21h36

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