2017-04-07 5 views
0

Lets sagen, dass ich die folgenden Werte in einer MySQL-Datenbank-Tabelle haben:Mysql Reverse Pattern Matching - Alternative?

a 
ab 
abc 
abcd 

ich für eine schnelle Art und Weise bin auf der Suche alle Werte abzurufen, die ein Präfix meiner eingegeben werden. Offensichtlich ist dies funktioniert:

SELECT * FROM table WHERE 'abcde12345' LIKE CONCAT(col, '%'); 

... aber sehr langsam auf große Datensätze. Gibt es intelligentere Möglichkeiten zum Speichern der Daten, um schnelle Suchvorgänge zu ermöglichen?

+0

Also in diesem Fall ist Ihre Eingabe "abcde12345'' und Ihr Ergebnis sollte' {a ab, abc, abcd} '?? –

+0

@JuanCarlosOropeza genau! – jvataman

+0

Sie können Willem Vorschlag versuchen, erstellen Sie einen Index für 'col'? –

Antwort

0

Diese Macht Hilfe, zusammen mit INDEX(col):

SELECT * 
    FROM table 
    WHERE col BETWEEN 'a' AND 'abcde12345' 
     AND 'abcde12345' LIKE CONCAT(col, '%'); 

Dies ist wahrscheinlicher:

SELECT * 
    FROM table 
    WHERE col IN ('a', 'ab', 'abc', ..., 'abcde12345'); 

Letztere Version konnte von 'abcde12345' mit Code konstruiert werden, oder (schmerzlicher) in einer gespeicherten Prozedur.