假设我在表中有1,000,000行,我执行此查询(在Python中使用sqlite3
模块):
c.execute('SELECT * FROM mytable WHERE editdist3(description, "hello world") < 500
AND price > 3707 AND price < 3800' )
显然,计算100万行的editdist3
编辑距离/ Levenshtein distance对CPU来说是非常昂贵的!
问题:如何确保在计算Levenshtein距离之前应用过滤条件3707 < price < 3800
?
我应该执行两个查询:一个主要查询来预先过滤此3707 < price < 3800
条件,然后只有第二个查询计算editdist3
剩下的(少很多)行?或者有没有办法在一个查询中执行此操作?
注意:这个问题是这个better question的措词不好(我的坏!)。
答案 0 :(得分:0)
如果您在ID
上有索引,sql引擎将使用它来查找描述,然后将距离仅应用于这些元素。
最好应该使用(ID, description)
create index idx on mytable (ID, description);
您可以通过查看explain plan。
来测试它