【发布时间】:2011-08-18 03:30:15
【问题描述】:
我有两个表要加入。 TABLE_A(包含列“a”)和 TABLE_BC(包含列“b”和“c”)。 TABLE_BC 上有一个条件。这两个表由 'rowid' 连接。
类似:
SELECT a, b, c FROM main.TABLE_A INNER JOIN main.TABLE_BC WHERE (b > 10.0 AND c < 10.0) ON main.TABLE_A.rowid = main.TABLE_BC.rowid ORDER BY a;
或者:
SELECT a, b, c FROM main.TABLE_A AS s1 INNER JOIN (SELECT rowid, b, c FROM main.TABLE_BC WHERE (b > 10.0 AND c < 10.0)) AS s2 ON s1.rowid = s2.rowid ORDER BY a;
我需要使用不同的 TABLE_A 执行此操作几次,但 TABLE_BC 不会改变...因此我可以通过为查询的常量部分创建一个临时内存数据库 (mem) 来加快速度。
CREATE TABLE mem.cache AS SELECT rowid, b, c FROM main.TABLE_BC WHERE (b > 10.0 AND c < 10.0);
跟随(很多)
SELECT a, b, c FROM main.TABLE_A INNER JOIN mem.cache ON main.TABLE_A.rowid = mem.cache.rowid ORDER BY a;
我从上述所有查询中得到相同的结果集,但最后一个选项是迄今为止最快的。
问题是我想避免将查询分成两部分。我希望 SQLite 自动为我做同样的事情(至少在第二种情况下),但它似乎没有发生......为什么会这样?
谢谢。
【问题讨论】:
标签: caching sqlite inner-join