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
 

rmh

Aktives Mitglied
Mitglied seit
6 Jul 2008
Beiträge
1,897
Punkte für Reaktionen
18
Punkte
38
Interessant: Wie lange dauert diese Abfrage?
Code:
SELECT [I]spalte[/I] FROM [I]tabelle[/I] WHERE [I]spalte[/I] LIKE '%ABC%';


Gruß
R.
 

rmh

Aktives Mitglied
Mitglied seit
6 Jul 2008
Beiträge
1,897
Punkte für Reaktionen
18
Punkte
38
Na also, da geht noch was! SQL-Abfragen werden generell schneller, wenn du die Spalte angibst, anstelle per *-Wildcard in allen Spalten zu suchen. ;-)
 

P.Hoffmann

Neuer User
Mitglied seit
1 Feb 2009
Beiträge
179
Punkte für Reaktionen
0
Punkte
0
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
 

rmh

Aktives Mitglied
Mitglied seit
6 Jul 2008
Beiträge
1,897
Punkte für Reaktionen
18
Punkte
38
Ä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?
 

Erhalten Sie 3CX für 1 Jahr kostenlos!

Gehostet, in Ihrer privaten Cloud oder on-Premise! Ganz ohne Haken. Geben Sie Ihren Namen und Ihre E-Mail an und los geht´s:

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.
oder via