我有一个很长的查询:
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;
感谢。
答案 0 :(得分:1)
按rowid选择似乎不使用索引。使用类似id NOT IN (some 60000 ids)
的表达式几乎肯定不会使用索引。
我认为你最好的选择可能是对已编入索引的候选键进行选择。通过什么都不做,你可以获得可接受的性能。