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: