sql >> Databasteknik >  >> RDS >> Mysql

Hur söker man efter rader som innehåller en delsträng?

Tja, du kan alltid prova WHERE textcolumn LIKE "%SUBSTRING%" - men det här kommer garanterat att gå ganska långsamt, eftersom din fråga inte kan göra en indexmatchning eftersom du letar efter tecken på vänster sida.

Det beror på fälttypen - ett textområde sparas vanligtvis inte som VARCHAR, utan snarare som (ett slags) TEXT-fält, så du kan använda MATCH MOT operatör.

För att få de kolumner som inte stämmer överens, sätt helt enkelt ett NOT framför liknande:WHERE textcolumn NOT LIKE "%SUBSTRING%" .

Huruvida sökningen är skiftlägeskänslig eller inte beror på hur du lagrar data, särskilt vilken SAMMANSTÄLLNING du använder. Som standard är sökningen skiftlägesokänslig.

Uppdaterat svar för att återspegla frågeuppdatering:

Jag säger att genom att göra ett WHERE field LIKE "%value%" är långsammare än WHERE field LIKE "value%" om kolumnfältet har ett index, men det är ändå betydligt snabbare än att få alla värden och ha ditt programfilter. Båda scenarierna:

1/ Om du gör SELECT field FROM table WHERE field LIKE "%value%" , MySQL kommer att skanna hela tabellen och bara skicka fälten som innehåller "värde".

2/ Om du gör SELECT field FROM table och låt sedan din applikation (i ditt fall PHP) filtrera endast raderna med "värde" i, MySQL kommer också att skanna hela tabellen, men skicka alla fält till PHP, som sedan måste göra ytterligare arbete. Detta är mycket långsammare än fall #1.

Lösning:Använd WHERE sats och använd EXPLAIN för att se föreställningen.



  1. Viloläge – unik kolumnbegränsning ignoreras

  2. MySQL IN med GILLA

  3. MySQL heltalsfält returneras som sträng i PHP

  4. Hur skickar jag in lösenordet till pg_dump?