我尝试在我的sqlite数据库中插入1000行,但是花费了超过16秒的时间。我的代码中有没有什么地方是我看不到的?
NSLog(@"--start--");
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
static sqlite3_stmt *compiledStatement;
for(int k = 0; k < 1000; k++)
sqlite3_exec(database, [[NSString stringWithFormat:@"insert into myTable (id, name) values ('%i', 'a')", k] UTF8String], NULL, NULL, NULL);
sqlite3_finalize(compiledStatement);
sqlite3_close(database);
}
NSLog(@"--stop--");
start : 2010-11-27 11:21:11.704
stop : 2010-11-27 11:21:27.908谢谢!
发布于 2010-11-27 20:21:37
这是由于SQLite的自动提交。您需要使用以下命令调用sqlite3_exec:
BEGIN TRANSACTION现在像以前一样插入所有记录。在你做完这件事之后。执行:
COMMIT TRANSACTION这应该能起到作用。
此外,this FAQ question还将解释为什么它的速度要慢得多。它实际上比常见问题中所说的每秒几十次查询要快得多,但由于iPhone上闪存的性质,这似乎是正常的。
发布于 2010-11-27 20:10:22
最后,我在insert查询中添加了这两行:
sqlite3_exec(database, "BEGIN", 0, 0, 0);
sqlite3_exec(database, "COMMIT", 0, 0, 0);
start : 2010-11-27 13:07:26.022
stop : 2010-11-27 13:07:26.285感谢您的帮助!
发布于 2010-11-27 18:55:50
您可能需要执行一次大容量插入,而不是执行1000次sql操作
https://stackoverflow.com/questions/4291244
复制相似问题