Tom: (My)SQL - Abfrage: IN und LIKE kombinieren?

Beitrag lesen

Hello,

»» ok, d.h. [...]WHERE spalte LIKE '%auto%' OR spalte LIKE '%hinz%'
»»
»» stimmt das so?

theoretisch schon. Das macht aber die Abfrage _extrem_ teuer.

steh grad auf der leitung- was heisst "teuer" im zusammenhang mit sql??

Eine Abfrage eines feststehenden Wertes auf Identität mit einer Spalte einer Tabelle ist billig, weil hier nur die Spalte auf exakte Übereinstimung durchsucht werden muss

Eine Abfrage eines feststehenden Wertes auf Identität mit einer Spalte einer Tabelle, die indiziert ist, ist extrem billig, weil hier eine binäre Suche im Index der Seite durchgeführt werden kann.

Eine Abfrage eines feststehenden Wertes auf Übereinstimnung mirt dem Beginn einer Spalte einer Tabelle ist, je nach Impelementation aufwändig bis relativ billig, weil hier nur die Spalte auf Übereinstimung ihres Beginns durchsucht werden muss oder aber sogar der Index dazu benutzt werden kann.

Bei intelligenten Systemen gilt das auch für das Vorkommen am Ende einer Spalte, wenn über diese Spalte ein Index in voller Breite angelegt wurde...

Wenn man aber nun nur das Vorkommen eines Wertes innerhalb der Werte einer Spalte (sogenannte Binnensuche) untersuchen will, dann müssen alle Werte der Spalte Schritt für Schritt auf eine anteilige Übereinstimmung mit dem gesuchten Wert untersucht werden. Das geht i.d.R. nicht mit einem Index und muss Datensatz für Datensatz aufwändig durchgeführt werden.

Das bezeichnet man dann als "extrem teuer"

Die am Frontend einfach erscheinenden Suchwerkzeuge beachten derartige "Einstellungen" automatisch und bauen daraus eine möglichst billige Abfrage.

was meinst du mit "frontend"?

Das Frontend ist die dem Benutzer zur Verfügung gestellte Schnittstelle.

ich hab eine simple php-datei mit einem formular mit suchfeld.

Das Formular gehört innerhalb des Browserfensters zum Frontend

dies wird an meine datei mit der sql-abfrage geschickt.

Und landet dann in der Datenübernahme des "Controllers"

ich möchte wissen, wie ich mit dem suchbegriff umgehen soll, den jemand in das formularfeld eingegeben hat, damit ich zu einem vernünftigen sql-statement komme...

Überlege zuerst, ob dieser Suchbegriff

  • genau übereinstimmen soll
  • mit dem Anfang eines gespeicherten Wertes übereinstimnmen soll
  • am Ende eines gespeicherten Wertes vorkommen soll
  • in einem gespeicherten Wert enthalten sein soll

#---

  • ob ein gespeicherter Wert im Suchbegriff enthalten sein soll (das wird ganz teuer).

usw. falls Dir noch 'was einfällt.

Ohne Überlegung wird Deine Suche aber bei größeren Datenmengen eher ins Chaos führen als zu sinnvollen Treffern :-P

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de