Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/02/2008, 13h48   #1
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
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 :
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
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2008, 13h58   #2
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
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 :
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
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2008, 09h43   #3
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 485
Points : 1 485
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 :
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é
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h49.


 
 
 
 
Partenaires

Hébergement Web