以下查询需要 5 秒才能执行:
SELECT DISTINCT(Product.Name) FROM Product WHERE (0=1 OR Product.Number="prod11");
虽然以下只需要 15 毫秒:
SELECT DISTINCT(Product.Name) FROM Product WHERE (Product.Number="prod11");
有趣的是,以下也只需要 15 毫秒:
SELECT DISTINCT(Product.Name) FROM Product WHERE (1=1 AND Product.Number="prod11");
查询计划显示第一个查询使用全表扫描(出于某种未知原因),而第二个和第三个查询使用索引(如预期的那样)。
由于某种原因,Sqlite 似乎优化了“1=1 AND ...”,但没有优化“0=1 OR ...”。
我该怎么做才能使 Sqlite 也将索引用于第一个查询?
查询是由 NHibernate 构建的,所以很难改变它们......
Sqlite 版本是 Windows 的最新版本。