Mysql
 sql >> Base de données >  >> RDS >> Mysql

mysql:moyen efficace pour la recherche postfixée (comme '% text' alias préfixe générique) ?

Un index sur champ inversé sera la solution, certains pensent comme :

create index idx_reverse on table ( reverse( field ) );
select * from table where reverse(field) like 'txet%';

mais MySQL n'autorise pas l'indexation sur les expressions, uniquement sur les colonnes :

c'est MySQL crée la syntaxe d'index :

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (index_col_name,...)
    [index_option] ...

C'est postgres create index syntax :

CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] name ON table [ USING method ]
    ( { column | ( expression ) } [ opclass ] [, ...] )
    ...

Un contournement peut être créer un deuxième champ indexé (champ -> dleif) et un mysql déclencheur pour conserver le champ inversé :

alter table my_table add column dleif ...;
create index idx_reverse on my_table ( dleif );
Create Trigger `reverse_field` Before Update on `my_table` for each row BEGIN
    set new.dleif = reverse( new.field );
END;
select * from table where dleif like reverse('%text');