sql >> Databáze >  >> RDS >> Mysql

? LIKE (sloupec || '%')

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:



  1. Jak analyzovat JSON ve spouštěči MYSQL

  2. Železniční transakce

  3. Je možné provést cizí klíč MySQL do jedné ze dvou možných tabulek?

  4. Problém Linkq to Entities a LEFT OUTER JOIN se vztahy MANY:1