sql >> Databasteknik >  >> RDS >> Mysql

mysql:effektivt sätt för postfix-sökning (som '%text' aka. prefix jokertecken)?

Ett index över omvänt fält kommer att vara lösningen, vissa tänker som:

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

men MySQL tillåter inte indexering över uttryck, bara över kolumner:

detta är MySQL skapa indexsyntax :

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

Detta är postgres skapa indexsyntax :

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

Ett arbete runt kan skapa ett indexerat andra fält (fält -> dleif) och en mysql utlösa för att behålla omvänt fält:

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. Hur vet man vad ett bra index är?

  2. Övervakning av prestandaräknare via PERFMON | Felsökning av SQL Server-prestanda -3

  3. ORA-24408:kunde inte generera unikt servergruppsnamn

  4. Entitetsramverk med mysql-databasmigreringar misslyckas när index skapas