Guido Schürkötter: MySQL: sehr lange Query kürzen, optimieren?

Beitrag lesen

Hallo Community,

ich habe ein Problem mit sehr langen SQL Queries, die meine Datenbank sehr lange beschäftigen. Die Query wird von einer Software so generiert und ich frage mich, ob es nicht auch kürzer geht. An der grundsätzlichen Datenstruktur kann ich leider nichts ändern, aber es wäre toll, wenn ein SQL Kenner mal kurz über die unten gezeigte SQL schauen könnte. Mir ginge es darum, ob man die Anfrage selbst anders formulieren könnte, damit sie kürzer ist bzw. idealerweise schneller verarbeitet wird. Ich denke man erkennt, dass ich selbst nicht den Plan habe ;)

Ich bedanke mich schonmal im Vorfeld für jede Hilfe. Falls ich woanders kompetenter Hilfe erhalten kann, würde ich mich über einen entsprechenden Link auch freuen.

Guido

SELECT audio.id , audio.audio\_file , IF( FIND_IN_SET( 955, audio.keys )
OR FIND_IN_SET( 956, audio.keys )
OR FIND_IN_SET( 3344, audio.keys )
OR FIND_IN_SET( 3349, audio.keys )
OR FIND_IN_SET( 3619, audio.keys )
OR FIND_IN_SET( 3620, audio.keys )
OR FIND_IN_SET( 5210, audio.keys )
OR FIND_IN_SET( 5329, audio.keys )
OR FIND_IN_SET( 6209, audio.keys )
OR FIND_IN_SET( 6796, audio.keys )
OR FIND_IN_SET( 8506, audio.keys )
OR FIND_IN_SET( 9808, audio.keys )
OR FIND_IN_SET( 9890, audio.keys )
OR FIND_IN_SET( 9891, audio.keys )
OR FIND_IN_SET( 9893, audio.keys )
OR FIND_IN_SET( 10607, audio.keys )
OR FIND_IN_SET( 11809, audio.keys )
OR FIND_IN_SET( 12494, audio.keys )
OR FIND_IN_SET( 13665, audio.keys )
OR FIND_IN_SET( 13672, audio.keys )
OR FIND_IN_SET( 15535, audio.keys )
OR FIND_IN_SET( 17545, audio.keys )
OR FIND_IN_SET( 18257, audio.keys )
OR FIND_IN_SET( 19000, audio.keys )
OR FIND_IN_SET( 20366, audio.keys )
OR FIND_IN_SET( 21347, audio.keys )
OR FIND_IN_SET( 22672, audio.keys )
OR FIND_IN_SET( 22864, audio.keys )
OR FIND_IN_SET( 22889, audio.keys )
OR FIND_IN_SET( 23357, audio.keys )
OR FIND_IN_SET( 26076, audio.keys )
OR FIND_IN_SET( 26394, audio.keys )
OR FIND_IN_SET( 28481, audio.keys )
OR FIND_IN_SET( 28774, audio.keys )
OR FIND_IN_SET( 31526, audio.keys )
OR FIND_IN_SET( 38525, audio.keys )
OR FIND_IN_SET( 39045, audio.keys )
OR FIND_IN_SET( 42062, audio.keys )
OR FIND_IN_SET( 44699, audio.keys )
OR FIND_IN_SET( 46021, audio.keys ) , 1, IF( FIND_IN_SET( 955, audio.keyword )
OR FIND_IN_SET( 956, audio.keyword )
OR FIND_IN_SET( 3344, audio.keyword )
OR FIND_IN_SET( 3349, audio.keyword )
OR FIND_IN_SET( 3619, audio.keyword )
OR FIND_IN_SET( 3620, audio.keyword )
OR FIND_IN_SET( 5210, audio.keyword )
OR FIND_IN_SET( 5329, audio.keyword )
OR FIND_IN_SET( 6209, audio.keyword )
OR FIND_IN_SET( 6796, audio.keyword )
OR FIND_IN_SET( 8506, audio.keyword )
OR FIND_IN_SET( 9808, audio.keyword )
OR FIND_IN_SET( 9890, audio.keyword )
OR FIND_IN_SET( 9891, audio.keyword )
OR FIND_IN_SET( 9893, audio.keyword )
OR FIND_IN_SET( 10607, audio.keyword )
OR FIND_IN_SET( 11809, audio.keyword )
OR FIND_IN_SET( 12494, audio.keyword )
OR FIND_IN_SET( 13665, audio.keyword )
OR FIND_IN_SET( 13672, audio.keyword )
OR FIND_IN_SET( 15535, audio.keyword )
OR FIND_IN_SET( 17545, audio.keyword )
OR FIND_IN_SET( 18257, audio.keyword )
OR FIND_IN_SET( 19000, audio.keyword )
OR FIND_IN_SET( 20366, audio.keyword )
OR FIND_IN_SET( 21347, audio.keyword )
OR FIND_IN_SET( 22672, audio.keyword )
OR FIND_IN_SET( 22864, audio.keyword )
OR FIND_IN_SET( 22889, audio.keyword )
OR FIND_IN_SET( 23357, audio.keyword )
OR FIND_IN_SET( 26076, audio.keyword )
OR FIND_IN_SET( 26394, audio.keyword )
OR FIND_IN_SET( 28481, audio.keyword )
OR FIND_IN_SET( 28774, audio.keyword )
OR FIND_IN_SET( 31526, audio.keyword )
OR FIND_IN_SET( 38525, audio.keyword )
OR FIND_IN_SET( 39045, audio.keyword )
OR FIND_IN_SET( 42062, audio.keyword )
OR FIND_IN_SET( 44699, audio.keyword )
OR FIND_IN_SET( 46021, audio.keyword ) , 2, IF( FIND_IN_SET( 955, audio.keys )
OR FIND_IN_SET( 956, audio.keys )
OR FIND_IN_SET( 3344, audio.keys )
OR FIND_IN_SET( 3349, audio.keys )
OR FIND_IN_SET( 3619, audio.keys )
OR FIND_IN_SET( 3620, audio.keys )
OR FIND_IN_SET( 5210, audio.keys )
OR FIND_IN_SET( 5329, audio.keys )
OR FIND_IN_SET( 6209, audio.keys )
OR FIND_IN_SET( 6796, audio.keys )
OR FIND_IN_SET( 8506, audio.keys )
OR FIND_IN_SET( 9808, audio.keys )
OR FIND_IN_SET( 9890, audio.keys )
OR FIND_IN_SET( 9891, audio.keys )
OR FIND_IN_SET( 9893, audio.keys )
OR FIND_IN_SET( 10607, audio.keys )
OR FIND_IN_SET( 11809, audio.keys )
OR FIND_IN_SET( 12494, audio.keys )
OR FIND_IN_SET( 13665, audio.keys )
OR FIND_IN_SET( 13672, audio.keys )
OR FIND_IN_SET( 15535, audio.keys )
OR FIND_IN_SET( 17545, audio.keys )
OR FIND_IN_SET( 18257, audio.keys )
OR FIND_IN_SET( 19000, audio.keys )
OR FIND_IN_SET( 20366, audio.keys )
OR FIND_IN_SET( 21347, audio.keys )
OR FIND_IN_SET( 22672, audio.keys )
OR FIND_IN_SET( 22864, audio.keys )
OR FIND_IN_SET( 22889, audio.keys )
OR FIND_IN_SET( 23357, audio.keys )
OR FIND_IN_SET( 26076, audio.keys )
OR FIND_IN_SET( 26394, audio.keys )
OR FIND_IN_SET( 28481, audio.keys )
OR FIND_IN_SET( 28774, audio.keys )
OR FIND_IN_SET( 31526, audio.keys )
OR FIND_IN_SET( 38525, audio.keys )
OR FIND_IN_SET( 39045, audio.keys )
OR FIND_IN_SET( 42062, audio.keys )
OR FIND_IN_SET( 44699, audio.keys )
OR FIND_IN_SET( 46021, audio.keys ) , 3, IF( 0, 4, 9 ) ) ) ) AS relevanz
FROM audio
JOIN structure\_audio ON structure\_audio.id = audio.id
WHERE (
structure\_audio.id IS NOT NULL
AND audio.state =1
)
AND (
(
FIND_IN_SET( 955, audio.keys )
OR FIND_IN_SET( 956, audio.keys )
OR FIND_IN_SET( 3344, audio.keys )
OR FIND_IN_SET( 3349, audio.keys )
OR FIND_IN_SET( 3619, audio.keys )
OR FIND_IN_SET( 3620, audio.keys )
OR FIND_IN_SET( 5210, audio.keys )
OR FIND_IN_SET( 5329, audio.keys )
OR FIND_IN_SET( 6209, audio.keys )
OR FIND_IN_SET( 6796, audio.keys )
OR FIND_IN_SET( 8506, audio.keys )
OR FIND_IN_SET( 9808, audio.keys )
OR FIND_IN_SET( 9890, audio.keys )
OR FIND_IN_SET( 9891, audio.keys )
OR FIND_IN_SET( 9893, audio.keys )
OR FIND_IN_SET( 10607, audio.keys )
OR FIND_IN_SET( 11809, audio.keys )
OR FIND_IN_SET( 12494, audio.keys )
OR FIND_IN_SET( 13665, audio.keys )
OR FIND_IN_SET( 13672, audio.keys )
OR FIND_IN_SET( 15535, audio.keys )
OR FIND_IN_SET( 17545, audio.keys )
OR FIND_IN_SET( 18257, audio.keys )
OR FIND_IN_SET( 19000, audio.keys )
OR FIND_IN_SET( 20366, audio.keys )
OR FIND_IN_SET( 21347, audio.keys )
OR FIND_IN_SET( 22672, audio.keys )
OR FIND_IN_SET( 22864, audio.keys )
OR FIND_IN_SET( 22889, audio.keys )
OR FIND_IN_SET( 23357, audio.keys )
OR FIND_IN_SET( 26076, audio.keys )
OR FIND_IN_SET( 26394, audio.keys )
OR FIND_IN_SET( 28481, audio.keys )
OR FIND_IN_SET( 28774, audio.keys )
OR FIND_IN_SET( 31526, audio.keys )
OR FIND_IN_SET( 38525, audio.keys )
OR FIND_IN_SET( 39045, audio.keys )
OR FIND_IN_SET( 42062, audio.keys )
OR FIND_IN_SET( 44699, audio.keys )
OR FIND_IN_SET( 46021, audio.keys )
)
OR (
FIND_IN_SET( 955, audio.keyword )
OR FIND_IN_SET( 956, audio.keyword )
OR FIND_IN_SET( 3344, audio.keyword )
OR FIND_IN_SET( 3349, audio.keyword )
OR FIND_IN_SET( 3619, audio.keyword )
OR FIND_IN_SET( 3620, audio.keyword )
OR FIND_IN_SET( 5210, audio.keyword )
OR FIND_IN_SET( 5329, audio.keyword )
OR FIND_IN_SET( 6209, audio.keyword )
OR FIND_IN_SET( 6796, audio.keyword )
OR FIND_IN_SET( 8506, audio.keyword )
OR FIND_IN_SET( 9808, audio.keyword )
OR FIND_IN_SET( 9890, audio.keyword )
OR FIND_IN_SET( 9891, audio.keyword )
OR FIND_IN_SET( 9893, audio.keyword )
OR FIND_IN_SET( 10607, audio.keyword )
OR FIND_IN_SET( 11809, audio.keyword )
OR FIND_IN_SET( 12494, audio.keyword )
OR FIND_IN_SET( 13665, audio.keyword )
OR FIND_IN_SET( 13672, audio.keyword )
OR FIND_IN_SET( 15535, audio.keyword )
OR FIND_IN_SET( 17545, audio.keyword )
OR FIND_IN_SET( 18257, audio.keyword )
OR FIND_IN_SET( 19000, audio.keyword )
OR FIND_IN_SET( 20366, audio.keyword )
OR FIND_IN_SET( 21347, audio.keyword )
OR FIND_IN_SET( 22672, audio.keyword )
OR FIND_IN_SET( 22864, audio.keyword )
OR FIND_IN_SET( 22889, audio.keyword )
OR FIND_IN_SET( 23357, audio.keyword )
OR FIND_IN_SET( 26076, audio.keyword )
OR FIND_IN_SET( 26394, audio.keyword )
OR FIND_IN_SET( 28481, audio.keyword )
OR FIND_IN_SET( 28774, audio.keyword )
OR FIND_IN_SET( 31526, audio.keyword )
OR FIND_IN_SET( 38525, audio.keyword )
OR FIND_IN_SET( 39045, audio.keyword )
OR FIND_IN_SET( 42062, audio.keyword )
OR FIND_IN_SET( 44699, audio.keyword )
OR FIND_IN_SET( 46021, audio.keyword )
)
OR (
(
( 0 )
OR ( 0 )
OR ( 0 )
OR audio.audio\_number = 'drums'
)
)
)
ORDER BY relevanz ASC , audio_quality DESC , audio.create DESC
LIMIT 0 , 3000