iPhone上的SQLite临时表存储

时间:2009-06-22 13:23:40

标签: iphone database optimization sqlite

我在基于SQLite的iPhone应用程序中使用临时表。性能不是所需的,所以我查看了各种候选优化。其中大多数都运作良好并具有预期效果。但是,我还想尝试moving the temporary tables from flash into memory看看是否有任何改进。

在实际设备上,我尝试使用以下方法进行配置:

PRAGMA temp_store = 2;

这些执行没有错误。但是,当我使用:

查询配置时
PRAGMA temp_store;

未返回任何结果,因此我无法验证此配置是否有效。我可以阅读其他PRAGMA设置,例如'page_size'。谁能告诉我:

  • 如果这是预期的行为
  • 如果这是iPhone上SQLite中不受支持的配置
  • 如果这样的优化在iPhone上毫无意义,即使它可能(可能是由硬件引起)
  • 在此方案中,如何将临时表存储成功移动到内存中

注意:我非常了解SDK 3.0中的核心数据,但我有充分的理由不使用它。

更新: jitter指出iPhone上的SQLite实例可能已编译为SQLITE_TEMP_STORE设置为始终使用临时文件。我不知道这个设置 - 有没有办法确认是这种情况?

2 个答案:

答案 0 :(得分:1)

我不知道但是猜测他们用SQLITE_TEMP_STORE = 0编译了sqllite。并且还有另一个人试过这个并没有成功。 SQLite optimization on the iPhone

  • 列表项

我自己无法尝试,但源中似乎也有sqlite3TempInMemory()函数(src/main.c)。不知道你是否可以打电话。

  

如果是,则此函数返回true   应该使用主内存而不是   瞬态寻呼机的临时文件   文件和声明期刊。该   返回的值取决于的值   db-> temp_store(运行时参数)和   编译时的值   SQLITE_TEMP_STORE。下表   描述了之间的关系   这两个值和这个功能   返回值。

答案 1 :(得分:1)

我刚刚将SQLite源自己添加到我的项目中,因为至少iPhone OS 2.x上的SQLite不是线程安全的。