sql >> Database >  >> RDS >> Mysql

? LIKE (kolom || '%')

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:



  1. Spring + Hibernate:Query Plan Cache Geheugengebruik

  2. Hoe stel ik ORDER BY-params in met behulp van een voorbereid PDO-statement?

  3. Hoe lid te worden heeft veel relatietabel en haal het resultaat op per type

  4. Openshift:hoe krijg ik op afstand toegang tot MySQL?