Предполагам, че levenshtein_ratio
е функция, която сте написали (или може би включена от някъде другаде). Ако е така, сървърът на базата данни няма да може да оптимизира това в нормалния смисъл на използване на индекс. Така че това означава, че просто трябва да го извика за всеки запис, който е резултат от другите условия на присъединяване. С вътрешно свързване това може да бъде изключително голям брой с тези размери на таблицата (максимум 8000*250000 =2 милиарда). Можете да проверите общия брой пъти, когато трябва да бъде извикан с това:
SELECT
count(*)
FROM
library a,
classifications b
WHERE
a.`release_year` = b.`year`
AND a.`id` IS NULL
Това е обяснение защо е бавен (всъщност не е отговор на въпроса как да се оптимизира). За да го оптимизирате, вероятно ще трябва да добавите допълнителни ограничаващи фактори към условието за присъединяване, за да намалите броя на повикванията към дефинираната от потребителя функция.