Supongo que levenshtein_ratio
es una función que escribió (o tal vez incluida en otro lugar). Si es así, el servidor de la base de datos no podría optimizar eso en el sentido normal de usar un índice. Entonces significa que simplemente necesita llamarlo para cada registro que resulte de las otras condiciones de combinación. Con una combinación interna, podría ser un número extremadamente grande con esos tamaños de tabla (un máximo de 8000*250000 =2 mil millones). Puede verificar el número total de veces que necesitaría llamarse con esto:
SELECT
count(*)
FROM
library a,
classifications b
WHERE
a.`release_year` = b.`year`
AND a.`id` IS NULL
Esa es una explicación de por qué es lento (no es realmente una respuesta a la pregunta de cómo optimizarlo). Para optimizarlo, probablemente necesite agregar factores limitantes adicionales a la condición de combinación para reducir la cantidad de llamadas a la función definida por el usuario.