我有这个命令创建一个表:的SQLite/FMDB性能问题时启用外键,对特定表
CREATE TABLE "A" (`id` INTEGER PRIMARY KEY NOT NULL, `b_id` INTEGER NOT NULL REFERENCES B(id) ON DELETE CASCADE, `c_id` INTEGER NOT NULL REFERENCES C(id) ON DELETE CASCADE, `field1` INTEGER, `field2` TEXT NOT NULL, `field3` INTEGER NOT NULL, `field4` INTEGER NOT NULL, `field5` INTEGER NOT NULL)
当我使外国键的支持(通过PRAGMA命令),我有性能问题上此表在进行“大量”更新时(约3000)。我在其他表(其中也包含外键)上没有问题。对于这个表,更新在~90秒内完成,而其他表只需要〜1秒。如果我不启用外键,〜3k更新很快(几秒)完成。
附加说明:
- 我使用FMDatabase作为SQLite的包装。
- 我在事务中包装我的更新语句。
- 事务的执行时间似乎与事务中的更新数量成线性关系。例如,如果我只进行100次更新,则需要大约3秒钟的时间。
- 我试图将VACUUM数据库,我甚至试图从头开始重新创建它。它没有改变任何东西。
如果有人对此问题的来源有所了解,请告诉我!
我的猜测是你错过了一个索引。 – 2014-09-29 16:25:09