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

? LIKE (kolonne || '%)'

Forespørgslen:

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

kan omskrives som (Postgres og MySQL):

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

Som nævnt skulle den første formular også fungere. Det kan dog være vanskeligt, fordi tegn med særlig betydning for LIKE (mindst _%\ ) i kolonnen skulle undslippes. Hvis du vil have det til at fungere med både MySQL og Postgres, skal du observere specialtegn i begge implementeringer. Så den 2. form er meget mindre fejltilbøjelig på rektor.

Ydeevne

Ingen af ​​disse forespørgsler kan bruge et indeks på col , begge er ikke sargable . Problemet kan revurderes som at finde alle mulige præfikser til det givne søgemønster ? , som kan optimeres på samme måde som i dette relaterede svar (for Postgres) på dba.SE:



  1. Få adgang til MySQL-feltets kommentarer med PHP

  2. HTTP-fejl 500.22 - Intern serverfejl (Der er fundet en ASP.NET-indstilling, som ikke gælder i integreret administreret pipeline-tilstand.)

  3. Hvordan kan jeg indsætte billede i en sqlite-database

  4. MySQL tæller rækkers ydeevne