Bonjour,
Je suis sous MySQL 5.0 et j'ai 2 tables contenant chacune une séquence de caractère pouvant être assez longue.
target_sequence
idtarget_sequence INT PK,
sequence TEXT,
INDEX tsequence_indx (sequence(600))
targettmp
seq_ TEXT,
INDEX seq_indx (seq(600))
Ces 2 tables ne sont pas reliées par clés étrangères (targettmp est une table temporaire), j'ai créé des index de 600 caractères (la totalité de la longueur n'étant pas indexable à cause d'une limitation interne de MySQL), mais la taille des séquence peut être très longue (12 000 caractères dans le pire des cas).
Je voudrais récupérer idtarget_sequence en croisant la targettmp sur l'égalité de séquences.
J'ai donc tenté un :
Voici le résultat de l'EXPLAIN :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 explain select idtarget_sequence FROM targettmp JOIN target_sequence ON sequence = seq_;
Autant je comprends que la totalité de la targettmp soit lue, autant je pensais que l'index de séquence de target_sequence allait servir.
Sauriez-vous si un index de 600, plus petit donc que certaines séquences puisse faire en sorte que l'index ne soit pas utilisé, ou auriez-vous une idée là-dessus ?
Je pensais pouvoir utiliser un FULLTEXT, mais ce n'est valable que pour les tables MYISAM qui ne gèrent pas les clés étrangères d'après la doc, je suis donc obligé d'utiliser des tables INNODB.
En vous remerciant,
C. Tobini
Partager