sql >> Database teknologi >  >> RDS >> Mysql

Hvordan søger man efter rækker, der indeholder en understreng?

Nå, du kan altid prøve WHERE textcolumn LIKE "%SUBSTRING%" - men dette er garanteret ret langsomt, da din forespørgsel ikke kan lave et indeksmatch, fordi du leder efter tegn i venstre side.

Det afhænger af felttypen - et tekstområde vil normalt ikke blive gemt som VARCHAR, men snarere som (en slags) TEKST-felt, så du kan bruge KAMP MOD operatør.

For at få de kolonner, der ikke matcher, skal du blot sætte en NOT foran lignende:WHERE textcolumn NOT LIKE "%SUBSTRING%" .

Hvorvidt søgningen skelner mellem store og små bogstaver eller ej, afhænger af, hvordan du lagerfører dataene, især hvilken SAMLING du bruger. Som standard vil søgningen ikke skelne mellem store og små bogstaver.

Opdateret svar for at afspejle spørgsmålsopdatering:

Jeg siger det ved at lave et WHERE field LIKE "%value%" er langsommere end WHERE field LIKE "value%" hvis kolonnefeltet har et indeks, men det er stadig betydeligt hurtigere end at få alle værdier og have dit applikationsfilter. Begge scenarier:

1/ Hvis du gør SELECT field FROM table WHERE field LIKE "%value%" , vil MySQL scanne hele tabellen og kun sende de felter, der indeholder "værdi".

2/ Hvis du gør SELECT field FROM table og så lad din applikation (i dit tilfælde PHP) kun filtrere rækkerne med "værdi" i, MySQL scanner også hele tabellen, men sender alle felterne til PHP, som så skal udføre yderligere arbejde. Dette er meget langsommere end tilfælde #1.

Løsning:Brug venligst WHERE klausul, og brug EXPLAIN for at se forestillingen.



  1. Sådan trækkes data fra databasen og se dem som en ListView

  2. Flere array_agg()-kald i en enkelt forespørgsel

  3. Flask-SQLAlchemy Indeks for små bogstaver - overspringsfunktion, ikke understøttet af SQLAlchemy-refleksion

  4. Hvordan ved jeg, hvornår min docker mysql-beholder er oppe, og mysql er klar til at tage forespørgsler?