私は大量のクエリを持っており、levenshtein を使用してタイプミスを計算しています。現在、levenshtein により mysql がフル CPU 時間を消費しています。私のクエリは、UNION ステートメントの全文検索 + レーベンシュタインです。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";