Dotaz:
SELECT * FROM table WHERE ? LIKE (col || '%');
lze přepsat jako (Postgres a MySQL):
SELECT * FROM table WHERE col = left(?, length(col));
Jak bylo uvedeno, první formulář by měl fungovat také. Může to být složité, protože znaky se zvláštním významem pro LIKE
(nejméně _%\ ) ve sloupci musel by utéct. Pokud chcete, aby fungoval jak s MySQL, tak s Postgres, budete muset v obou implementacích dodržovat speciální znaky. Takže 2. forma je mnohem méně náchylná k chybám na principu.
Výkon
Žádný z těchto dotazů nemůže používat index na col , oba nejsou sargable
. Problém lze přehodnotit jako nalezení všech možných předpon k danému vyhledávacímu vzoru ? , který lze optimalizovat podobným způsobem jako v této související odpovědi (pro Postgres) na dba.SE: