De vraag:
SELECT * FROM table WHERE ? LIKE (col || '%');
kan worden herschreven als (Postgres en MySQL):
SELECT * FROM table WHERE col = left(?, length(col));
Zoals opgemerkt, zou het eerste formulier ook moeten werken. Het kan echter lastig zijn, omdat personages met een speciale betekenis voor LIKE
(ten minste _%\
) in de kolom zou moeten ontsnappen. Als je wilt dat het met zowel MySQL als Postgres werkt, moet je in beide implementaties rekening houden met speciale tekens. Dus de 2e vorm is veel minder foutgevoelig op hoofdsom.
Prestaties
Geen van deze zoekopdrachten kan een index gebruiken op col
, beide zijn niet sargable
. Het probleem kan opnieuw worden beoordeeld als het vinden van alle mogelijke voorvoegsels voor het opgegeven zoekpatroon ?
, die op een vergelijkbare manier kan worden geoptimaliseerd als in dit gerelateerde antwoord (voor Postgres) op dba.SE: