レストラン名とその所在地の都市を格納するためのデータベース テーブルがあります。例:
名前 | 街
イレブン マディソン パーク | ニューヨーク市
グラマシー居酒屋 | ニューヨーク市
ロータス オブ サイアム | 写真 トーク
モダン | LA
ABC キッチン | LA
INSERT の前に着信エントリがある場合、同じ都市に類似のレストラン名がない場合は、先に進んで挿入を実行したいと考えています。
しかし、エントリが { name: "Eleven Madison", city: "NYC" } のようなものである場合、"name" 列で同じ都市の同様のエントリを見つけたいと考えています。この例では、"NYC の "eleven madison park" です。 「、挿入を実行して、「競合」テーブルに新しい行を保存したい-これらのレストランのID(最後の挿入IDと同様の行ID)
次の SQL クエリで、レーベンシュタイン距離アルゴリズムを使用しました。
SELECT id, levenshtein_ratio(name, 'Eleven Madison') AS levsh from restaurants
where
city_name = 'NYC'
order by levsh asc
limit 0, 1
次に、しきい値を 8 に設定し、levsh が 8 未満の場合は競合としてマークします。つまり、「競合」テーブルに新しいレコードを挿入します。このクエリは、テーブルが 1000 レコードになるまで正常に機能していました。このクエリが完了するまでに 2 秒かかります。
これは、市内のすべてのレストランの levenshtein_ratio を計算しているためであることを理解しています。「Eleven」、「Madison」、またはさらに良いものを含むものは、次のようなことができれば
WHERE city_name = 'NYC' AND SOUNDEX(any word in `name`) = SOUNDEX(any word in 'Eleven Madison')
このクエリを改善および最適化する方法についての提案を手伝ってください。可能であれば、私がやっていることに対するより良いアプローチがあれば教えてください。
ありがとう