MySQL - Volltextsuche
Harry
- datenbank
Hallo @ all
Ich möchte gerade eine Suche erstellen, die ein Wort in einer Tabelle finden kann.
Die beste Möglichkeit die ich gefunden habe funktioniert wie folgt:
ALTER TABLE tabellenname ADD FULLTEXT (textpalte)
SELECT * FROM tabellenname WHERE MATCH textspalte AGAINST ('suchtext')
Da diser Teil jedesmal bei einer Suchabfrage durchlaufen werden muss, und ALTER TABLE bei größeren Datenbanken einige Zeit braucht, wollte ich wissen, ob es noch eine andere Möglichkeit gibt, oder man diese Möglichkeit noch optimieren kann.
-------------
Mfg: Harry
Moinsen
ALTER TABLE tabellenname ADD FULLTEXT (textpalte)
SELECT * FROM tabellenname WHERE MATCH textspalte AGAINST ('suchtext')
Da diser Teil jedesmal bei einer Suchabfrage durchlaufen werden muss, und ALTER TABLE bei größeren Datenbanken einige Zeit braucht, wollte ich wissen, ob es noch eine andere Möglichkeit gibt, oder man diese Möglichkeit noch optimieren kann.
Die obere Zeile ist soweit ich weiß nur ein einziges mal möglich. Dann legt MySQL für die Spalte einen Volltextindex an, auf den es dann bei jeder neuen Suche zugreifen kann, soll heißen: Du mußt den Index nur ein einziges mal anlegen. Dann nie mehr.
Eine andere Möglichkeit (ist aber sicher langsamer) wäre:
SELECT * FROM tabelle WHERE textspalte LIKE '%suchbegriff%'
Ciao,
Harry
(ID = 42)
(nur echt mit dem Smiley ;)
Hallo Harry :)
1. Danke für dei Antwort.
2. Bedeutet das, dass auch neue Zeilen mit Eintrag in die Spalte automatisch in den Volltextindex hinzugefügt werden, oder muss nach jedem neuen Eintrag in die Tabelle ALTER TABLE tabellenname ADD FULLTEXT (textpalte) aufgerufen werden?
Mfg: Harald (ich hoffe der Name ist noch nicht "belegt")
============
Die obere Zeile ist soweit ich weiß nur ein einziges mal möglich. Dann legt MySQL für die Spalte einen Volltextindex an, auf den es dann bei jeder neuen Suche zugreifen kann, soll heißen: Du mußt den Index nur ein einziges mal anlegen. Dann nie mehr.
Sup!
- Bedeutet das, dass auch neue Zeilen mit Eintrag in die Spalte automatisch in den Volltextindex hinzugefügt werden, oder muss nach jedem neuen Eintrag in die Tabelle ALTER TABLE tabellenname ADD FULLTEXT (textpalte) aufgerufen werden?
Tja, warum heisst es wohl alter TABLE und nicht alter tuple?
--> SQL-Buch lesen ;-)
Gruesse,
Bio
Hallo,
Tja, warum heisst es wohl alter TABLE und nicht alter tuple?
Da ein Tupel eine nichtveränderbare Sequenz ist, nehme ich an, deine Antwort bedeutet, dass der Volltextindex automatisch aktualisiert wird.
--> SQL-Buch lesen ;-)
Habe leider noch keines, doch werde mir bei nächster Gelegenheit sicher eines zulegen :-)
------------
Mfg: Harry
Moinsen
Tja, warum heisst es wohl alter TABLE und nicht alter tuple?
Da ein Tupel eine nichtveränderbare Sequenz ist, nehme ich an, deine Antwort bedeutet, dass der Volltextindex automatisch aktualisiert wird.
Stimmt ;-)
Ciao,
Harry
Sup!
Da ein Tupel eine nichtveränderbare Sequenz ist, nehme ich an, deine Antwort bedeutet, dass der Volltextindex automatisch aktualisiert wird.
Wenn ein Tupel nicht veränderbar ist, wofür ist dann der UPDATE Befehl?
Verwunderte
Gruesse,
Bio
Holla
Wenn ein Tupel nicht veränderbar ist, wofür ist dann der UPDATE Befehl?
Wolltest Du nicht ein Buch über Datenbanken schreiben? 10 bis 15 Bände oder so ...
Vielleicht solltest Du das immer als Frage-Antwort-Spiel aufziehen: Ein irritierter verwirrter unwissender Professor frägt und Super-Bio antwortet immer (!) mit einer Gegenfrage :)
Ciao,
Harry
Sup!
Mit diesem Frage-Antwort-Dingens stände ich auch in der Tradition von Sokrates' großartiger Mäeutik... *fg*
Ich werde also schon mal mit dem Plot für Band 1 beginnen ;-)
Gruesse,
Bio
hi Harry,
Da ein Tupel eine nichtveränderbare Sequenz ist,
nehme ich an, deine Antwort bedeutet, dass der
Volltextindex automatisch aktualisiert wird.
richtig.
Dadurch wird also gleichzeitig jeder schreibende Zugriff
auf die Tabelle (INSERT, UPDATE, DELETE) deutlich lang-
samer. Du solltest also ein günstiges Verhältnis zwischen
Lese- und Schreibzugriffen haben.
Viele Grüße
Michael
Hallo Harry,
jetzt muss ich dich aber ruegen.
Eine andere Möglichkeit (ist aber sicher langsamer) wäre:
SELECT * FROM tabelle WHERE textspalte LIKE '%suchbegriff%'
Ein "LIKE '%suchbegriff%'" ist *nie* eine Loesung :) Wenn das noetig ist, dann hat jemand etwas
falsch gemacht.
Gruesse,
CK