在Sqlite查询中测试条件的顺序是什么?

时间:2018-04-15 19:45:57

标签: python sql sqlite

假设我在表中有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的措词不好(我的坏!)。

1 个答案:

答案 0 :(得分:0)

如果您在ID上有索引,sql引擎将使用它来查找描述,然后将距离仅应用于这些元素。

最好应该使用(ID, description)

创建索引
create index idx on mytable (ID, description);

您可以通过查看explain plan

来测试它