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

? MI PIACE (colonna || '%')

La domanda:

SELECT * FROM table WHERE ? LIKE (col || '%');

può essere riscritto come (Postgres e MySQL):

SELECT * FROM table WHERE col = left(?, length(col));

Come commentato, anche il primo modulo dovrebbe funzionare. Può essere complicato, però, perché personaggi con un significato speciale per LIKE (almeno _%\ ) nella colonna bisognerebbe scappare. Se vuoi che funzioni sia con MySQL che con Postgres, dovrai osservare i caratteri speciali in entrambe le implementazioni. Quindi il secondo modulo è molto meno soggetto a errori sul preside.

Prestazioni

Nessuna di queste query può utilizzare un indice su col , entrambi non sono sargable . Il problema può essere rivalutato trovando tutti i possibili prefissi per il modello di ricerca specificato ? , che può essere ottimizzato in modo simile come in questa risposta correlata (per Postgres) su dba.SE: