Ho una grande serie di query e uso levenshtein per calcolare gli errori di battitura, ora levenshtein fa sì che mysql abbia tempo di cpu completo. La mia query è una ricerca a testo completo + levenshtein in una dichiarazione UNION. sql1 è la mia query corrente, sql2 è solo la ricerca fulltext che è veloce e non usa troppa CPU, l'ultima la leventhein che farà il picco!alternativa di levenshtein
Qualcuno di voi ha un modo alternativo per ottenere gli errori di battitura? Si prega di non rispondere alla normalizzazione dei dati, ci ho pensato, ma non è applicabile ai miei dati, in quanto non posso pre-fare le partite/calcoli e creare una tabella separata con gli indici.
$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";