iOS设备上的SQLCipher + FMDB性能很差

时间:2014-04-23 05:17:49

标签: ios objective-c sqlite fmdb sqlcipher

我使用SQLCipher加密sqlite数据库,并使用FMDB通过[FMDB setKey:]调用对加密数据库执行sqlite操作。

当我在加密数据库上使用SQLCipherFMDB时,我的应用程序运行缓慢。 如果我在非加密数据库上仅使用FMDB,那么它可以正常工作,而无需使用该设备的更多CPU。

请在这里帮我解决如何使用SQLCipher& FMDB? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

最佳SQLCipher性能有一些非常重要的指导原则:

  • 不要重复打开和关闭连接,因为密钥派生非常昂贵,设计
  • 使用事务来包装插入/更新/删除操作。除非在事务范围内执行,否则每个操作都将发生在它自己的事务中,这会使事情减慢几个数量级。
  • 确保您的数据已规范化(即,使用良好做法将数据分成多个表以消除冗余)。不必要的数据重复导致数据库膨胀,这意味着SQLCipher可以运行更多页面
  • 确保索引用于搜索或加入条件的所有列。如果你不这样做,SQLCipher将需要在大量页面上执行完整的数据库扫描
  • 定期吸尘以确保数据库紧凑,如果您进行大量删除,更新等。

最后,为了进一步诊断特定查询语句的性能,您是否可以针对某些查询运行explain query plan命令?说明查询命令的输出描述为here