我有一个数据库表,用于存储餐馆名称及其所在的城市。例如:
名称|城市
十一麦迪逊公园| NYCgramercy酒馆| NYC
暹罗莲花| TOK
现代| LA
ABC Kitchen | LA
现在当INSERT之前有一个传入的条目时,如果同一个城市没有类似的餐馆名称,我想继续执行插入。
但是如果条目是这样的,比如{name:“Eleven Madison”,city:“NYC”},我想在同一个城市的“名称”栏中找到类似的条目,在这个例子中是“十一麦迪逊公园”在“NYC”中,我想插入并在“冲突”表中存储一个新行 - 这些餐馆的ID(最后插入ID和类似的行ID)
我使用Levenshtein distance算法,并使用以下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')
请提供有关如何改进和优化此查询的建议,如果可能的话,请提供更好的方法来解决我的问题。
由于