Vinzenz Mai: MySQL : mit regulären Ausdrücken Wörter für Buchstaben suchen

Beitrag lesen

Hallo,

» SELECT word FROM word_table WHERE word REGEXP '^e{1,2}dghn$'
» (Ein oder zwei 'e's)
»
» SELECT word FROM word_table WHERE word REGEXP '^e+d?g?hn$'
» (Mindestens ein 'e', 'd' und 'g' optional)

Diese Abfragen habe ich soweit umgesetzt. Sie sind zwar nicht schneller als die vorherige,

warum auch. Die Verwendung von REGEXP sorgt dafür, dass jeder Datensatz betracht werden muss. Reguläre Ausdrücke sind im allgemeinen noch ziemlich teuer.

Ich würde auf REGEXP komplett verzichten, statt dessen wegen des speziellen Einsatzzweckes in 29(!) weiteren Spalten die einzelnen Buchstabenhäufigkeiten abspeichern [1] und bei der Abfrage nutzen.

Die Buchstabenhäufigkeiten könntest Du

a) in der API (sprich) PHP oder
b) mit einem Trigger

ermitteln. Ich gehe auch bei dieser Lösung davon aus, dass es stets zu einem Full-Table-Scan kommen wird. Dafür wird aber die teure REGEXP-Engine nicht angeworfen.

Freundliche Grüße

Vinzenz

[1] ganz bewusst gegen Normalisierung verstoßend. Ich gehe davon aus, dass
    es bei dieser DB nur selten zu INSERTs kommt und UPDATE-Operationen fast
    ausgeschlossen sind.