Je suppose que levenshtein_ratio
est une fonction que vous avez écrite (ou peut-être incluse d'ailleurs). Si tel est le cas, le serveur de base de données ne serait pas en mesure d'optimiser cela dans le sens normal de l'utilisation d'un index. Cela signifie donc qu'il doit simplement l'appeler pour chaque enregistrement résultant des autres conditions de jointure. Avec une jointure interne, cela pourrait être un nombre extrêmement grand avec ces tailles de table (un maximum de 8000*250000 =2 milliards). Vous pouvez vérifier le nombre total de fois qu'il devrait être appelé avec ceci :
SELECT
count(*)
FROM
library a,
classifications b
WHERE
a.`release_year` = b.`year`
AND a.`id` IS NULL
C'est une explication de la raison pour laquelle il est lent (pas vraiment une réponse à la question de savoir comment l'optimiser). Pour l'optimiser, vous devrez probablement ajouter des facteurs de limitation supplémentaires à la condition de jointure afin de réduire le nombre d'appels à la fonction définie par l'utilisateur.