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 :

Performance select distinct sur requête simple


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 95
    Points : 54
    Points
    54
    Par défaut Performance select distinct sur requête simple
    Bonjour,

    J'ai un problème avec la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select distinct(year) from selling where type in ('A', 'C') and country like ('%FR%');
    Le résultat est retournée après 30s (4 lignes).
    Un select * est instantané.
    La table contient 1,2 millions de lignes.

    J'ai fait un explain mais le résultat me parle pas vraiment:
    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
    16
     
    Plan hash value: 188663770
     
    -----------------------------------------------------------------------------------
    | Id  | Operation          | Name         | Rows  | Bytes | Cost (%CPU)| Time     |
    -----------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT   |              |     5 |    90 | 68344   (1)| 00:13:41 |
    |   1 |  HASH UNIQUE       |              |     5 |    90 | 68344   (1)| 00:13:41 |
    |*  2 |   TABLE ACCESS FULL| SELLING|  1252 | 22536 | 68343   (1)| 00:13:41 |
    -----------------------------------------------------------------------------------
     
    Predicate Information (identified by operation id):
    ---------------------------------------------------
     
       2 - filter("COUNTRY" IS NOT NULL AND "COUNTRY" LIKE 
                  '%FR%' AND ("TYPE"='A' OR "TYPE"='C'))
    Si quelqu'un a une piste....

  2. #2
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Citation Envoyé par lapin_hobbit Voir le message
    Un select * est instantané.
    Bonjour,
    l'instantanéité du "select *" est due uniquement au fait qu'il ne ramène que les 1ères lignes ... s'il devait tout ramener, il passerait à peu près le même temps !

    Ensuite, "une piste", ça serait pour optimiser le temps de réponse ?
    Vu qu'il y a un LIKE '%quelquechose%', c'est difficile. Les '%' sont-ils vraiment indispensables ? Parce que dans une colonne "country", je m'attend à avoir "FR", pas "xxxFRyyyy". En retirant les % (au moins le 1er) - en fait, idéalement, en passant à une égalité -, si la colonne est indexée ET que l'utilisation de l'index est intéressante (à savoir, ça filtre suffisament), il y aura gain de temps.

    EDIT : sur le temps passé, il y a quand même aussi le temps de faire le distinct, ce qui peut ne pas être négligeable.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 95
    Points : 54
    Points
    54
    Par défaut
    Merci pour la réponse...

    Oui effectivement, je recherche une piste pour améliorer le temps de réponse de cette requête.

    Supprimer les %% n'est pas possible dans ce cas.
    En revanche j'ai vérifié et constaté l'absence d'index sur les champs country et type.
    Avec un index j'obtiens des performances raisonnables.

    Merci pour la piste

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    votre index sur country ne sera pas utilisé si vous faites un like '%valeur%'

  5. #5
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 95
    Points : 54
    Points
    54
    Par défaut
    merci pour l'information.

    L'index sur type allège donc suffisament la recherche.

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

Discussions similaires

  1. CRXI - Select distinct sur une partie de la requete
    Par battl14 dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 03/12/2008, 17h19
  2. select distinct sur le premier champ d'une table
    Par alexkickstand dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 28/08/2008, 16h03
  3. Select Distinct sur premier argument
    Par Tintou dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 16/04/2008, 10h07
  4. select distinct sur 2 champs
    Par alexkickstand dans le forum Langage SQL
    Réponses: 7
    Dernier message: 09/07/2007, 18h19
  5. Select distinct sur varchar
    Par SILO dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 02/10/2005, 00h17

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