Sven Rautenberg: MySQL: sehr lange Query kürzen, optimieren?

Beitrag lesen

Moin!

hmmm, das hängt vielleicht auch ein wenig davon ab, woher du die Zahlen 39045, 46021 usw beziehst.

Aber die Formulierung der Abfrage und die Verwendung von FIND_IN_SET() deutet auf ein ziemlich mässiges Datendesign hin....

Da stimme ich eindeutig zu.

Heißt: Die Ausführungsdauer läßt sich nur optimieren, wenn die Datenstruktur optimiert wird. Derzeit lagern diverse "Schlüsselzahlen" alle in einem einzigen String innerhalb des jeweiligen Datensatzes, und der Query sucht nach jeder gewünschten Zahl einzeln. Das sind massenweise Stringoperationen, die jeweils immer wieder bei Null anfangen.

Optimiert wäre, wenn diese Schlüsselzahlen in einer separaten Tabelle lagern würden, und von dort mit dem Datensatz verknüpft sind. Dann könnte man diverse Optimierungsstrategien wie Indexe oder Einkürzung der langen OR-Kette zu einem einzigen IN-Operator anwenden.

  • langsam
      -> evt solltest du dann mal über Volltextindizes nachdenken, die könnten u.U. helfen und den Lookup-Prozess in audio.keyword verschnellern

Ein Volltextindex muß aber auch speziell benutzt werden, er wird nicht automatisch eingesetzt. Siehe http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html.

- Sven Rautenberg

--
"Love your nation - respect the others."