Android上数据库表的参考完整性的价格是多少?

时间:2017-06-26 06:01:17

标签: android sqlite

嗯,标题说明了一切 - 对现有数据库pragma foreign_keys = true是否会使我的数据库“不那么快”?

2 个答案:

答案 0 :(得分:0)

每当添加,删除或更改数据时,数据库都需要检查约束是否仍然存在。 documentation列出了这些检查结果的一些示例。

实际上,您很可能无论如何都需要访问所有引用的表,因此所有内容都将在缓存中。 此外,如果数据库写入是交易开销,则最大的减速。因此,附加检查可能不会导致明显的延迟。

在任何情况下,SELECT查询都不受外键约束的影响。

答案 1 :(得分:0)

虽然接受的答案已经足够,但我想在这里提出一个具体的用例。

对于必须对现有数据库暗示外键约束且可能需要对数据库进行重构的任何人,请在setForeignKeyConstraintsEnabled的{​​{1}}方法中调用onOpen。 / p>

从书Android Enterprise

  

onOpen方法仅在onCreate,onUpgrade和onDowngrade之后调用,   这些方法在重建模式时可以快速松散地播放。在...的场合   应用程序必须在升级期间重命名或重新创建一个或两个表   少数几次真正令人欣慰的是外键约束没有得到强制执行。   在onOpen方法中启用外键约束会导致它们仅被强制执行   数据库初始化后。