您提供的信息太少,无法真正帮助您。
1)我的第一个猜测是尝试创建其他 WHERE 条件来减少要扫描的行数。
2)如果这是不可能的......鉴于表库和分类中的标题是已知的,一个想法是创建一个表,其中所有数据都已经像这样计算:
TABLE levenshtein_ratio
id_table_library
id_table_classifications
precalculated_levenshtein_ratio
因此您将使用此查询填充表:
insert into levenshtein_ratio select a.id, b.id, levenshtein_ratio(a.title, b.title) from library, classifications
然后您的查询将是:
SELECT
*
FROM
library a LEFT JOIN
classifications b ON a.`release_year` = b.`year`
LEFT JOIN levenshtein_ratio c ON c.id_table_library = a.id AND c.id_table_classifications = b.id
WHERE
a.`id` IS NULL
AND precalculated_levenshtein_ratio > 82
这个查询可能不会超过原来的 2 秒。
此解决方案的问题在于表 a 和 b 中的数据可以更改,因此您需要创建一个触发器以使其保持更新。