Ich habe eine leichte Herausforderung mit Daten, die ich gelöst werden muss. Ich habe eine Tabelle, wo der Klartext von E-Mails in einer Longtext-Spalte gespeichert ist. Es war so, bevor ich anfing, mich im Framework zu entwickeln. Es gibt über eine Million Zeilen, in denen bereits große E-Mails gespeichert sind.MySQL: Split Longtext-Spalte in mehrere Textspalten
Ich muss in diesem Feld nach Text suchen können, aber es dauert Ewigkeiten, bevor Ergebnisse zurückgegeben werden. Dies ist nicht ideal, da Hunderte von Benutzern das System verwenden und sie E-Mail-Inhalte durchsuchen können.
Ich habe die folgende einfache SQL-Anweisung versucht, aber es dauert zu lange Aufzeichnungen zu finden:
select id from emails where description like "%hello world%";
Nach dem der MySQL-Dokumentation können die Volltextindizierung nur in char, varchar und Textfelder verwendet werden.
Kann jemand einen effizienten Weg vorschlagen, in einer Longtextsäule zu suchen?
oder
Gibt es SQL Methoden/Befehle, die verwendet werden können, durch den Tisch zu laufen und Aufspalten des Inhalts des Feldes long in mehrere Textspalten für die Volltextindizierung?
Ich habe bereits versucht, die Volltextindizierung auf der Tabelle hinzuzufügen, aber es schlägt fehl. Hier ist die Ausgabe von einem anderen Versuch für eine neu erstellte Tabelle. 'create table sample (Beschreibung longtext);' - 'Abfrage OK, 0 Zeilen betroffen (0,20 sec)'. 'alter Tabelle Beispiel hinzufügen Volltext Index descidx (Beschreibung);' - 'ERROR 1214 (HY000): Der verwendete Tabellentyp unterstützt FULLTEXT Indizes nicht. Die Engine, die verwendet wird, ist: InnoDB. –
Ich glaube, ich habe mein Problem gefunden. Ich verwende derzeit MySQL 5.5 und nicht 5.6. Die Volltextindizierung wird erst ab MySQL 5.6 zu InnoDB hinzugefügt. –
Ja, das ist richtig, glücklicherweise ist das Upgraden ein müheloser Prozess – e4c5