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

Requêtes PostgreSQL Discussion :

Postgresql n'utilise pas mon index GIN pour le fulltext


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre chevronné
    Avatar de kedare
    Homme Profil pro
    Network Automation Engineer
    Inscrit en
    Juillet 2005
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Network Automation Engineer

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 548
    Points : 1 861
    Points
    1 861
    Par défaut Postgresql n'utilise pas mon index GIN pour le fulltext
    Hello,
    j'ai un petit problème, j'ai une table avec une colonne tsvector et un index GIN dessus, seulement postgresql ne les utilise pas quand je vais ce genre de requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select id,title from blog_article where tsv @@ plainto_tsquery('hello');
    Savez vous pourquoi ? peut-on le forcer a utiliser l'index ?
    Voila la définition de la table :
    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
    CREATE TABLE blog_article
    (
      id serial NOT NULL,
      title character varying(255) NOT NULL,
      header_image character varying(255),
      slug character varying(50) NOT NULL,
      format integer NOT NULL,
      category_id integer NOT NULL,
      author_id integer NOT NULL,
      "content" text NOT NULL,
      comments_enabled boolean NOT NULL,
      publication_mode integer NOT NULL,
      date_of_creation timestamp with time zone NOT NULL,
      date_of_modification timestamp with time zone NOT NULL,
      tsv tsvector,
      CONSTRAINT blog_article_pkey PRIMARY KEY (id),
      CONSTRAINT blog_article_author_id_fkey FOREIGN KEY (author_id)
          REFERENCES auth_user (id) MATCH SIMPLE
          ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED,
      CONSTRAINT category_id_refs_id_25820696 FOREIGN KEY (category_id)
          REFERENCES blog_category (id) MATCH SIMPLE
          ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED,
      CONSTRAINT blog_article_slug_key UNIQUE (slug),
      CONSTRAINT blog_article_title_key UNIQUE (title)
    )
    WITH (OIDS=FALSE);
    Les indexes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE INDEX blog_article_author_id
      ON blog_article
      USING btree
      (author_id);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE INDEX blog_article_category_id
      ON blog_article
      USING btree
      (category_id);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE INDEX blog_article_tsv
      ON blog_article
      USING gin
      (tsv);
    et le Trigger pour mettre a jour tsv
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TRIGGER tsvectorupdate
      BEFORE INSERT OR UPDATE
      ON blog_article
      FOR EACH ROW
      EXECUTE PROCEDURE tsvector_update_trigger('tsv', 'pg_catalog.french', 'title', 'content');
    Que faire ?
    Merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    La table a-t-elle été analysée après que le vecteur soit rempli?
    Que sort l'EXPLAIN ANALYZE de la requête?

  3. #3
    Membre chevronné
    Avatar de kedare
    Homme Profil pro
    Network Automation Engineer
    Inscrit en
    Juillet 2005
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Network Automation Engineer

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 548
    Points : 1 861
    Points
    1 861
    Par défaut
    J'ai fait ANALYZE mais ca ne change rien,
    Voici un EXPLAIN ANALYZE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    -------------------------------------------------------------------------------------------------------
     Seq Scan on blog_article  (cost=0.00..6.21 rows=1 width=27) (actual time=0.162..0.216 rows=4 loops=1)
       Filter: (tsv @@ plainto_tsquery('hello'::text))
     Total runtime: 0.242 ms
    (3 rows)
    je met l'index a jour via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update blog_article set tsv = to_tsvector('french', title||content);
    EDIT: Bon il se met a utiliser les indexes sans aucune intervention maintenant... bizarre, enfin ca m'arange ;D

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Vu l'explain analyze on peut penser qu'il n'utilise pas l'index parce que le coût de parcours de la table est tellement faible que ça le ralentirait de passer par l'index (difficile de faire mieux que 0.2 ms). L'index devrait être utilisé automatiquement quand il y aura plus de données dans la table.

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

Discussions similaires

  1. Pourquoi Oracle n'utilise pas mes index ?
    Par yaggi64 dans le forum SQL
    Réponses: 4
    Dernier message: 25/11/2007, 16h03
  2. [apache2] Ne voit pas mon index.xhtml, penible
    Par jean christophe dans le forum Apache
    Réponses: 2
    Dernier message: 20/04/2005, 12h20

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