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

PostgreSQL Discussion :

[Postgres 8] Activer les index


Sujet :

PostgreSQL

  1. #1
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut [Postgres 8] Activer les index
    Bonjour,

    Je ne sais pas ou placer ce post car il est à moitié sur postgrés et à moitié sur les EJB !

    J'ai cré une BD, dont une table contient 4 millions d'enregistrements. J'ai créé un index sur une clé. Hors les temps de réponses avec et sans l'index sont identiques.
    C'est donc que mon index n'est pas pris en compte car d'habitude (sous postgres 7.4.1) si j'enlève l'index ou met l'index les traitements des données sont plus ou moins longs.

    J'ai testé les index grâce à mes EJB.

  2. #2
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    bonsoir,
    que donne un Explain ?

    tu peux telecharger la derniere version de pgadmin 3 (1.4) qui est une belle reussite, l'explain est donné de maniere graphique un peu a la SQL Server.

    As tu pensé a faire un petit vacuum ?

    Eventuellement, donne nous ta requete et tes indexs.

  3. #3
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut
    Pour les vacuum, je les ai fait

    Par contre je ne peux pas utiliser pgadminIII meme si j en avais envie mon serveur est un serveur debian sans interface graphique.


    L'explain donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     QUERY PLAN                                                                                                            
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     Seq Scan on acte  (cost=0.00..229113.29 rows=213798 width=8)
       Filter: ((iddecompte = 1790865) OR (iddecompte = 1554275) OR (iddecompte = 1549497) OR (iddecompte = 2002489) OR (iddecompte = 2043495) OR (iddecompte = 2090239) OR (iddecompte = 2547855) OR (iddecompte = 2574365) OR (iddecompte = 2842061) OR (iddecompte = 2917874))
    J'ai 2 table :
    Table decompte et acte
    Un acte appartient à plusieurs decompte donc la cle du decompte est rapatriée dans l'acte.
    J'ai donc mes EJB qui font la requete suivante (celle sur laquelle il rame d'ailleur j ai mis des chrono en java pour voir le temps des requetes environ 16 à 20 secondes au lieu de 1/10 de seconde):



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     SELECT idDecompte, idActe FROM acte WHERE (idDecompte=1790865) OR (idDecompte=1554275) OR (idDecompte=1549497) OR (idDecompte=2002489) OR (idDecompte=2043495) OR (idDecompte=2090239) OR (idDecompte=2547855) OR (idDecompte=2574365) OR (idDecompte=2842061) OR (idDecompte=2917874)
    L'index est :

    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
     
        Column     |         Type          |                        Modifiers
     
    ---------------+-----------------------+----------------------------------------
    ------------------
     idacte        | integer               | not null default nextval('public.acte_i
    dacte_seq'::text)
     dateacte      | date                  |
     quantite      | real                  |
     prixunitaire  | real                  |
     tarifbasesecu | real                  |
     tauxsecu      | real                  |
     rembsecu      | real                  |
     tauxmutuelle  | real                  |
     rembmutuelle  | real                  |
     depensereelle | real                  |
     tiers         | character varying(9)  |
     description   | character varying(25) |
     codeacte      | character varying(4)  |
     numligne      | smallint              |
     coef          | real                  |
     rangadh       | smallint              |
     numadh        | character varying(13) |
     iddecompte    | integer               |
     numdec        | smallint              |
     codeuti       | character varying(7)  |
     datesaisie    | date                  |
    Indexes:
        "acte_pkey" PRIMARY KEY, btree (idacte)
        "dec_index" btree (iddecompte)

    Si cela ne suffit pas j'ai un peu plus d'info sur mes ejbs ![/code]

  4. #4
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    Peux tu essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT iddecompte, idacte FROM acte WHERE iddecompte IN (1790865,1554275,1549497,2002489,2043495,2090239,2547855,2574365,2842061,2917874)
    si ca marche pas, peux tu essayer de forcer la main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    set enable_seqscan=off;
    set enable_indexscan=on;
    SELECT iddecompte, idacte FROM acte WHERE iddecompte IN (1790865,1554275,1549497,2002489,2043495,2090239,2547855,2574365,2842061,2917874)

  5. #5
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    Citation Envoyé par julienOriano
    Par contre je ne peux pas utiliser pgadminIII meme si j en avais envie mon serveur est un serveur debian sans interface graphique.
    Tu peux faire une connexion distante, et bonus pgadmin marche sous windows

  6. #6
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut
    Ok ! Ta deuxième modife marche si je fais les requetes à la main directe sur la BD -> c'est instantané !


    C'était le scanseq que j'avais activé -> mis a false dans le fichier de conf de postgres !
    J'ai activé la paire clé/valeur du scanindex !

    Je te remercie beaucoup de ton aide, qui m'a beaucoup appris !

  7. #7
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    dans ton postgresql.conf, verifie que tu as bien
    enable_indexscan = true
    enable_seqscan = true


    j'ai bien mis les 2 a true, postgresql choisira automatiquement si l'index ou le seqscan est moins couteux.

  8. #8
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    Par contre dans tes EJB, il faudrait a mon avis que tu change les OR ... OR ... OR en IN comme dans ma requete, tu y gagnera en lisibilité et en performance

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

Discussions similaires

  1. Activer/Désactiver les index
    Par oneagaindoguys dans le forum Requêtes
    Réponses: 11
    Dernier message: 12/01/2011, 12h39
  2. Questions sur les indexations
    Par freud dans le forum Bases de données
    Réponses: 2
    Dernier message: 11/05/2004, 11h38
  3. Les index sous Sybase
    Par Emdis dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 02/06/2003, 15h21

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