我在我的iPhone应用程序中运行了一些相对复杂的sqlite查询,有些查询花费了太多时间(超过15秒)。数据库中只有430条左右的记录。我注意到的一件事是,打开一个新的数据库连接(我只做一次)和单步执行查询结果(使用sqlite3_step())会导致sqlite3_backup_init()和sqlite3_enable_shared_cache()运行,在整个测试期间分别占用4450ms和3720ms的处理时间。在打开数据库连接之前,我尝试使用sqlite3_enable_shared_cache(0);禁用共享缓存,但似乎没有效果。
有没有人知道如何禁用它们,这样我就可以提高速度了?
发布于 2009-05-09 20:51:20
好吧,我想这并没有直接回答这个问题,但问题的一部分是我使用了交叉连接而不是左连接。这将查询时间从大约4000毫秒减少到了60毫秒。此外,不再调用backup_init函数,enable_shared_cache也不会旋转太多。
发布于 2009-07-06 20:54:39
我修复了我的应用程序,用left join替换了inner join。我的数据允许这样做。如果您的数据不允许,请考虑添加where子句
b.id=a.id上的苹果a内联香蕉b
与
b.id不为空的b.id=a.id上的苹果a左连接香蕉b
https://stackoverflow.com/questions/843998
复制相似问题