Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie suche ich nach Zeilen, die eine Teilzeichenfolge enthalten?

Nun, Sie können immer WHERE textcolumn LIKE "%SUBSTRING%" versuchen - Dies ist jedoch garantiert ziemlich langsam, da Ihre Abfrage keine Indexübereinstimmung durchführen kann, da Sie auf der linken Seite nach Zeichen suchen.

Es hängt vom Feldtyp ab - ein Textfeld wird normalerweise nicht als VARCHAR gespeichert, sondern als (eine Art) TEXT-Feld, sodass Sie den MATCH GEGEN Betreiber.

Um die Spalten zu erhalten, die nicht übereinstimmen, setzen Sie einfach ein NOT vor das Gleiche:WHERE textcolumn NOT LIKE "%SUBSTRING%" .

Ob bei der Suche zwischen Groß- und Kleinschreibung unterschieden wird oder nicht, hängt davon ab, wie Sie die Daten speichern, insbesondere welche COLLATION Sie verwenden. Standardmäßig wird bei der Suche zwischen Groß- und Kleinschreibung unterschieden.

Aktualisierte Antwort, um die Aktualisierung der Frage widerzuspiegeln:

Ich sage, dass ich ein WHERE field LIKE "%value%" mache ist langsamer als WHERE field LIKE "value%" wenn das Spaltenfeld einen Index hat, aber das ist immer noch erheblich schneller, als alle Werte zu bekommen und Ihren Anwendungsfilter zu haben. Beide Szenarien:

1/ Wenn Sie SELECT field FROM table WHERE field LIKE "%value%" machen , scannt MySQL die gesamte Tabelle und sendet nur die Felder, die "value" enthalten.

2/ Wenn Sie SELECT field FROM table tun und dann Ihre Anwendung (in Ihrem Fall PHP) nur die Zeilen mit "value" filtern lassen, scannt MySQL auch die gesamte Tabelle, sendet aber alle Felder an PHP, das dann zusätzliche Arbeit leisten muss. Dies ist viel langsamer als Fall Nr. 1.

Lösung:Bitte verwenden Sie das WHERE -Klausel und verwenden Sie EXPLAIN um die Aufführung zu sehen.