SQLite3慢查询解析

时间:2011-05-20 19:29:20

标签: caching sqlite

我有一个很长的查询:

SELECT field1, field2, ... FROM tambe WHERE (rowid NOT IN (some 60000 rowids));

查询可能会多次执行,因此我将其结果保存在临时表中。

CREATE TEMPORARY TABLE IF NOT EXISTS cache AS SELECT field1, field2, ... FROM tambe WHERE (rowid NOT IN (some 60000 rowids));

这样我不必每次都选择实际数据,但它仍然比它可能慢得多。我怀疑是解析查询的时间正在减慢它。

有没有办法将长查询封装在一种IF(CASE)语句中,以便SQLite解析器完全忽略它?

IF cache NOT EXISTS (...) END IF;

感谢。

1 个答案:

答案 0 :(得分:1)

按rowid选择似乎不使用索引。使用类似id NOT IN (some 60000 ids)的表达式几乎肯定不会使用索引。

我认为你最好的选择可能是对已编入索引的候选键进行选择。通过什么都不做,你可以获得可接受的性能。