[like][index] utiliser <colonne> like 'foo%'
Bonjour,
Je cherche a retrouver, a partir d'un string, une valeur en base de donnée.
jusque là, rien de special.
Là ou ca se complique, c'est qu'en realitée la valeur en base de donnée doit pouvoir posseder des wilCards.
je m'explique :
la table :
Code:
1 2 3 4 5 6 7 8
| CREATE TABLE `route` (
`route` varchar(150) NOT NULL,
`module` varchar(100) default NULL,
`controler` varchar(100) default NULL,
`action` varchar(100) default NULL,
`lang` varchar(2) default NULL,
PRIMARY KEY (`route`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
la requete :
Code:
select route, module, controler, `action` from zf_route where 'foo.bar' like route
le resultat :
Citation:
route module controler action lang
------ ------ --------- ------ ------
foo.% (NULL) index index fr
Bonne nouvelle : ca marche!
mauvaise nouvelle : ca n'utilise pas les index :
Code:
explain select * from route where 'foo.bar' like route;
Citation:
id select_type table type possible_keys key key_len ref rows Extra
------ ----------- ------ ------ ------------- ------ ------- ------ ------ -----------
1 SIMPLE route ALL (NULL) (NULL) (NULL) (NULL) 1 Using where
Donc, ma question est : avez vous une idée d'une facon de faire propre (utiliser un like de facon inversée me semble aberrant, mais, j'ai aps d'autre idée) et / ou de comment faire en sorte que des index soient utilisés.
J'ai essayé aussi en mettant un index full text sur la colonne incriminée, sans succes.
.