MySQL - Volltextsuche "umgekehrt"

P.Hoffmann

Neuer User
Mitglied seit
1 Feb 2009
Beiträge
179
Punkte für Reaktionen
0
Punkte
0
N'abend zusammen,

folgendes Problem:
Ich habe in einer MySQL-Tabelle (mit insgesamt 14 Millionen Datensätzen) "ABC" stehen, nun soll dieser Eintrag aber auch dann gefunden werden, wenn "ABCDE" oder "ABCDEF" (Länge unbekannt) übergeben wird. Die Suche soll max. innerhalb von 1,5s durchgeführt werden.

Meine Versuche:
(Das "ABC" steht in der Spalte "prefix")

1)
Code:
SELECT * FROM tabelle WHERE 'ABCDE' REGEXP concat('^',prefix);

Dauer: 59,38 s

2)
Code:
SELECT * FROM tabelle WHERE LOCATE(prefix, 'ABCDE') != 0;

Dauer: 3,17 s

3)
Code:
SELECT * FROM tabelle WHERE instr('ABCDE', prefix) > 0;

Dauer: 2,8 s

4)
Code:
SELECT * FROM tabelle WHERE 'ABCDE' LIKE CONCAT(prefix, '%');

Dauer: 3,68 s

Hat sonst noch jemand eine Idee, den Query weiter zu optimieren?

Danke und Grüße,
Philipp
 
Interessant: Wie lange dauert diese Abfrage?
Code:
SELECT [I]spalte[/I] FROM [I]tabelle[/I] WHERE [I]spalte[/I] LIKE '%ABC%';


Gruß
R.
 
Na also, da geht noch was! SQL-Abfragen werden generell schneller, wenn du die Spalte angibst, anstelle per *-Wildcard in allen Spalten zu suchen. ;-)
 
Ja, aber mit deiner Abfrage würde ich den DS finden, wenn dieser z.B. ABCD lautet, aber mir ist ja quasi mehr und nicht weniger von dem eigentlichen String bekannt (wofür sich dein Query eignen würde)

Grüße
Philipp
 
Ähh, sorry aber ich kann dir nicht folgen? Was willst du mir mit diesem Satz sagen? :)

Versuch's mal hiermit:
Code:
SELECT * FROM [I]tabelle[/I] WHERE MATCH [I]spalte[/I] AGAINST ('+[I]ABC[/I]* -[I]sonstwas[/I]' IN BOOLEAN MODE)

Schneller geworden?
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.