Estou assumindo que
levenshtein_ratio
é uma função que você escreveu (ou talvez incluída de outro lugar). Nesse caso, o servidor de banco de dados não seria capaz de otimizar isso no sentido normal de usar um índice. Portanto, isso significa que ele simplesmente precisa chamá-lo para cada registro que resulta das outras condições de junção. Com uma junção interna, pode ser um número extremamente grande com esses tamanhos de tabela (no máximo 8000*250000 =2 bilhões). Você pode verificar o número total de vezes que precisaria ser chamado com isso:SELECT
count(*)
FROM
library a,
classifications b
WHERE
a.`release_year` = b.`year`
AND a.`id` IS NULL
Essa é uma explicação de por que é lento (não é realmente uma resposta para a questão de como otimizá-lo). Para otimizá-lo, você provavelmente precisará adicionar fatores limitantes adicionais à condição de junção para reduzir o número de chamadas para a função definida pelo usuário.