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 :

Index pour accélérer un MAX()


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 10
    Points : 10
    Points
    10
    Par défaut Index pour accélérer un MAX()
    Bonjour à tous.

    Je suis à la recherche d'une solution pour définir un index (ou une autre solution) pour accélérer une requête du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select max(colone_contenant_une_date) from t_table
    J'ai essayé de définir un index descendant sur la colonne concernée, l'exécution de la requête provoque toujours un full scan.

    Quelqu'un pourrait-il m'aider svp ?

    Par avance, merci !

  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
    Par défaut
    C'est quoi votre souci
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
     
    mni@XXX>create table t as select * from all_objects;
     
    Table créée.
     
    mni@XXX>desc t
     Nom                                                                     NULL ?   Type
     ----------------------------------------------------------------------- -------- --------------------------------
    -----------------
     OWNER                                                                   NOT NULL VARCHAR2(30)
     OBJECT_NAME                                                             NOT NULL VARCHAR2(30)
     SUBOBJECT_NAME                                                                   VARCHAR2(30)
     OBJECT_ID                                                               NOT NULL NUMBER
     DATA_OBJECT_ID                                                                   NUMBER
     OBJECT_TYPE                                                                      VARCHAR2(18)
     CREATED                                                                 NOT NULL DATE
     LAST_DDL_TIME                                                           NOT NULL DATE
     TIMESTAMP                                                                        VARCHAR2(19)
     STATUS                                                                           VARCHAR2(7)
     TEMPORARY                                                                        VARCHAR2(1)
     GENERATED                                                                        VARCHAR2(1)
     SECONDARY                                                                        VARCHAR2(1)
     
    mni@XXX>create index ix_t on t (created);
     
    Index créé.
     
    mni@XXX>exec dbms_stats.gather_table_stats(user,'T',cascade=>true);
     
    Procédure PL/SQL terminée avec succès.
     
    mni@XXX>set autotrace on
    mni@XXX>select max(created) from t;
     
    MAX(CREA
    --------
    24/02/10
     
     
    Plan d'exécution
    ----------------------------------------------------------
    ----------------------------------------------------------
              0                    SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=2 Card=1 Bytes=8)
     
     
              1                  0   SORT (AGGREGATE)
     
     
              2                  1     INDEX (FULL SCAN (MIN/MAX)) OF 'IX_T' (NON-UNIQUE) (Cost=2 Card=17570 Bytes=140
    560)
     
     
     
     
     
     
    Statistiques
    ----------------------------------------------------------
              0  recursive calls
              0  db block gets
              2  consistent gets
              0  physical reads
              0  redo size
            508  bytes sent via SQL*Net to client
            651  bytes received via SQL*Net from client
              2  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
              1  rows processed

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Merci pour la réponse.

    Est-ce que vous pourriez m'expliquer rapidement ce qu'est le gather_table_stats et à quoi cela sert svp ?

    Merci.

  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
    Ca sert à calculer les statistiques pour aider Oracle à choisir le plan d'exécution

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Ok.
    Merci beaucoup pour votre aide à tous les deux.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/06/2011, 10h05
  2. Réponses: 3
    Dernier message: 18/05/2011, 16h52
  3. Aide pour un SELECT MAX(...)
    Par Gladiator dans le forum Langage SQL
    Réponses: 7
    Dernier message: 24/06/2005, 16h48
  4. Créer un index pour une Base de données
    Par john7 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 31/01/2005, 21h43
  5. Réponses: 7
    Dernier message: 21/10/2004, 09h13

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