Jag antar att levenshtein_ratio
är en funktion som du skrev (eller kanske ingår från någon annanstans). Om så är fallet, skulle databasservern inte kunna optimera det i normal mening med att använda ett index. Så det betyder att det helt enkelt behöver anropas för varje post som är resultatet av de andra anslutningsvillkoren. Med en inre koppling kan det vara ett extremt stort antal med dessa tabellstorlekar (max 8000*250000 =2 miljarder). Du kan kontrollera det totala antalet gånger den skulle behöva anropas med detta:
SELECT
count(*)
FROM
library a,
classifications b
WHERE
a.`release_year` = b.`year`
AND a.`id` IS NULL
Det är en förklaring till varför det är långsamt (inte riktigt ett svar på frågan om hur man optimerar det). För att optimera det måste du troligen lägga till ytterligare begränsande faktorer till anslutningsvillkoret för att minska antalet anrop till den användardefinierade funktionen.