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 :

indexation non utilisée pour chaînes de caractères


Sujet :

PostgreSQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 334
    Points : 123
    Points
    123
    Par défaut indexation non utilisée pour chaînes de caractères
    Bonjour,

    Je suis en train de créer une base sous PostgreSQL 8.2 dans laquelle je stocke des séquence d'ADN, dont la longueur maximum est de 13 000 caractères environ.

    Je voudrais sélectionner les séquences communes d'une table temporaire avec ma table de séquences.

    Pour ceci, j'ai créé un index pour les séquences de chacune des tables :

    target_sequence
    idtarget_sequence SERIAL,
    sequence TEXT

    CREATE INDEX sequence_indx ON target_sequence(sequence);

    targettmp
    seq_ TEXT

    CREATE INDEX seq_indx ON targettmp(seq_);

    Je tente la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXPLAIN select sequence, seq_ from targettmp, target_sequence where sequence = seq_
    Et voici le résultat de l'EXPLAIN :



    Apparement les index ne sont pas utilisés, les 2 tables ont 7 000 000 d'entrées chacune, si le parcourt est séquentiellement, la requête sera impossible.

    Pourriez-vous m'aiguiller là-dessus ?

    En vous remerciant,

    C. Tobini

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 334
    Points : 123
    Points
    123
    Par défaut
    Petite modification, j'ai tenté de saisir la totalité de mon fichier et des séquences trop longues ne sont pas acceptées en indexation.

    Voici l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ERROR:  index row size 2948 exceeds btree maximum, 2713
    HINT:  Values larger than 1/3 of a buffer page cannot be indexed.
    	Consider a function index of an MD5 hash of the value, or use full text indexing.
    Sauriez-vous s'il est possible d'augmenter la taille du buffer en question ?

    Auquel cas je vais me renseigner sur l'indexation full text.

    En vous remerciant,

    C. Tobini

  3. #3
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    Pour qu'il ait une chance d'utiliser l'index, il faut calculer les statistiques sur ta table : regarde du côté des commandes VACUUM et ANALYZE.
    Essaie par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VACUUM FULL ANALYZE ta_table;
    et regarde de nouveau le plan d'exécution pour voir si l'index sera utilisé.
    Par ailleurs ce n'est pas parce que tu as un index qu'il sera toujours préféré au "seq scan" par l'optimiseur, ça dépend du coût estimé
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

Discussions similaires

  1. [AC-2013] Affichage de l'ID d'un champ et non de la chaîne de caractère lié
    Par Hankow dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 02/06/2014, 10h12
  2. [XL-2010] formule pour chaînes de caractères
    Par canary dans le forum Excel
    Réponses: 1
    Dernier message: 03/01/2014, 11h41
  3. [MySQL] ne pas tenir compte des variables non utilisées pour éviter les bugs
    Par canary dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 26/03/2009, 09h46
  4. [Débutant] Utilisation de chaîne de caractères
    Par seerauber dans le forum MATLAB
    Réponses: 4
    Dernier message: 07/06/2007, 16h58
  5. [Optimisation] index non utilisé et using temporary
    Par jp_rennes dans le forum Requêtes
    Réponses: 6
    Dernier message: 23/10/2006, 11h05

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