Jeg antager, at levenshtein_ratio
er en funktion, som du har skrevet (eller måske inkluderet fra et andet sted). Hvis det er tilfældet, ville databaseserveren ikke være i stand til at optimere det i den normale forstand ved at bruge et indeks. Så det betyder, at det blot skal kaldes det for hver post, der er resultatet af de andre joinbetingelser. Med en indre sammenføjning kan det være et ekstremt stort tal med disse tabelstørrelser (maksimalt 8000*250000 =2 milliarder). Du kan tjekke det samlede antal gange, det skal kaldes med dette:
SELECT
count(*)
FROM
library a,
classifications b
WHERE
a.`release_year` = b.`year`
AND a.`id` IS NULL
Det er en forklaring på, hvorfor det er langsomt (ikke rigtig et svar på spørgsmålet om, hvordan man optimerer det). For at optimere den skal du sandsynligvis tilføje yderligere begrænsende faktorer til join-betingelsen for at reducere antallet af opkald til den brugerdefinerede funktion.