sql >> Database teknologi >  >> RDS >> Mysql

mysql:effektiv måde for postfix-søgning (som '%text' aka. præfiks jokertegn)?

Et indeks over omvendt felt vil være løsningen, nogle tænker som:

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

men MySQL tillader ikke indeks over udtryk, kun over kolonner:

dette er MySQL-opret indekssyntaks :

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

Dette er postgres create index syntaks :

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

Et omgå kan oprette indekseret andet felt (felt -> dleif) og en mysql trigger for at beholde omvendt felt:

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. Sådan beregnes glidende gennemsnit i MySQL

  2. oracle sql:opdater hvis der findes andet indsæt

  3. Sådan konverteres en streng til en numerisk værdi i PostgreSQL

  4. Hvad er underforespørgsler i oracle