Presumo che levenshtein_ratio
è una funzione che hai scritto (o forse inclusa da qualche altra parte). In tal caso, il server di database non sarebbe in grado di ottimizzarlo nel senso normale dell'utilizzo di un indice. Quindi significa che deve semplicemente chiamarlo per ogni record che risulta dalle altre condizioni di join. Con un inner join, potrebbe essere un numero estremamente elevato con quelle dimensioni della tabella (un massimo di 8000*250000 =2 miliardi). Puoi controllare il numero totale di volte che dovrebbe essere chiamato con questo:
SELECT
count(*)
FROM
library a,
classifications b
WHERE
a.`release_year` = b.`year`
AND a.`id` IS NULL
Questa è una spiegazione del motivo per cui è lento (non proprio una risposta alla domanda su come ottimizzarlo). Per ottimizzarlo, probabilmente dovrai aggiungere ulteriori fattori limitanti alla condizione di unione per ridurre il numero di chiamate alla funzione definita dall'utente.