Tôi đã viết xong câu hỏi khi câu trả lời đập vào mắt tôi, vì vậy tôi vẫn đăng bài để chia sẻ kiến thức!
Tôi nhận ra rằng giá trị trả về của hàm ẩn dụ là UTF8.
Việc so sánh với trường latin1 rõ ràng là phải gánh chịu chi phí hiệu suất khá cao.
Tôi đã thay thế phép gán biến bằng:
SET @metaphone_val:= CONVERT(double_metaphone(p_parameter) USING latin1);
Bây giờ truy vấn chạy nhanh như tôi mong đợi.