Zakładam, że levenshtein_ratio
to funkcja, którą napisałeś (lub może dołączyłeś z innego miejsca). Jeśli tak, serwer bazy danych nie byłby w stanie zoptymalizować tego w normalnym sensie korzystania z indeksu. Oznacza to, że po prostu musi to wywołać dla każdego rekordu, który wynika z innych warunków złączenia. W przypadku sprzężenia wewnętrznego może to być bardzo duża liczba przy tych rozmiarach tabeli (maksymalnie 8000*250000 =2 miliardy). Możesz sprawdzić łączną liczbę wywołań, używając tego:
SELECT
count(*)
FROM
library a,
classifications b
WHERE
a.`release_year` = b.`year`
AND a.`id` IS NULL
To jest wyjaśnienie, dlaczego jest powolny (nie jest to tak naprawdę odpowiedź na pytanie, jak go zoptymalizować). Aby go zoptymalizować, prawdopodobnie będziesz musiał dodać dodatkowe czynniki ograniczające do warunku dołączenia, aby zmniejszyć liczbę wywołań funkcji zdefiniowanej przez użytkownika.