我有一大堆查询并使用 levenshtein 来计算拼写错误,现在 levenshtein 导致 mysql 占用全部 cpu 时间。我的查询是 UNION 语句中的全文搜索 + levenshtein。sql1 是我当前的查询,sql2 只是全文搜索,速度快且不使用太多 cpu 时间,最后一个将达到峰值!
你们中的任何人都有其他方法来获取拼写错误吗?请不要回答规范化数据,我已经想到了,但不适用于我的数据,因为我无法预先进行匹配/计算并创建一个带有索引的单独表。
$sql1 = "(SELECT * FROM ci_sanctions_properties WHERE prop_type='LASTNAME' AND prop_value!='' AND MATCH(prop_value) AGAINST ('+usama bin laden' IN BOOLEAN MODE)) UNION (SELECT s.* FROM (SELECT levenshtein(prop_value, 'usama bin laden') AS dist, sanction_id, prop_type, prop_value FROM ci_sanctions_properties WHERE prop_type='LASTNAME' AND prop_value!='') s WHERE dist < 3) ORDER BY sanction_id";
$sql2 = "SELECT * FROM ci_sanctions_properties WHERE prop_type='LASTNAME' AND prop_value!='' AND MATCH(prop_value) AGAINST ('+usama bin laden' IN BOOLEAN MODE) ORDER BY sanction_id";
$sql3 = "SELECT s.* FROM (SELECT levenshtein(prop_value, 'usama bin laden') AS dist, sanction_id, prop_type, prop_value FROM ci_sanctions_properties WHERE prop_type='LASTNAME' AND prop_value!='') s WHERE dist < 3";