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?
 
Kostenlos!

Neueste Beiträge

Statistik des Forums

Themen
248,920
Beiträge
2,305,086
Mitglieder
378,641
Neuestes Mitglied
quickbooks2026