sql >> Database >  >> RDS >> Mysql

mysql:efficiënte manier voor zoeken op postfix (zoals '%text' oftewel prefix wildcard)?

Een index over omgekeerd veld zal de oplossing zijn, sommigen denken als:

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

maar MySQL staat geen index toe over expressies, alleen over kolommen:

dit is MySQL indexsyntaxis maken :

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

Dit is postgres create index syntaxis :

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

Een omzeiling kan een geïndexeerd tweede veld maken (veld -> dleif) en een mysql trigger om omgekeerd veld te behouden:

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');


  1. Sql Server string tot datum conversie

  2. Haal al het nieuws en alle reacties op

  3. Installeer MySQL op een Mac

  4. Hoe LIKE te gebruiken in SQL