Tôi giả định rằng levenshtein_ratio
là một hàm mà bạn đã viết (hoặc có thể được đưa vào từ một nơi khác). Nếu vậy, máy chủ cơ sở dữ liệu sẽ không thể tối ưu hóa điều đó theo nghĩa thông thường của việc sử dụng một chỉ mục. Vì vậy, nó có nghĩa là nó chỉ cần gọi nó cho mỗi bản ghi là kết quả của các điều kiện nối khác. Với một phép nối bên trong, đó có thể là một con số cực kỳ lớn với các kích thước bảng đó (tối đa là 8000 * 250000 =2 tỷ). Bạn có thể kiểm tra tổng số lần nó sẽ cần được gọi với điều này:
SELECT
count(*)
FROM
library a,
classifications b
WHERE
a.`release_year` = b.`year`
AND a.`id` IS NULL
Đó là lời giải thích tại sao nó chậm (không thực sự là câu trả lời cho câu hỏi làm thế nào để tối ưu hóa nó). Để tối ưu hóa nó, bạn có thể cần thêm các yếu tố giới hạn bổ sung vào điều kiện kết hợp để giảm số lượng lệnh gọi đến hàm do người dùng xác định.