我有一个用这个命令创建的表:
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数据库,我甚至尝试从头开始重新创建它。它没有改变任何东西。
如果有人对这个问题的根源有所了解,请告诉我们!