2

10000 レコードを挿入しようとしていますが、45 秒かかります

これは私のコードです

println(NSDate.new())
for index in 0...10000{
countrys.insert(name <- "abc")
//println(index)
}
println(NSDate.new())

このやり方ですか?

4

1 に答える 1

8

問題は、SQLite が各INSERTステートメントを個別にコミットする必要があることです。トランザクションの使用を検討する必要があります。transactionメソッド (SQL を実行する) でトランザクションを開始し、BEGIN TRANSACTIONそれを使用commitしてそれらをコミットできます ( COMMITSQL を実行します)。


例えば:

db.transaction(.Deferred) { txn in
    for i in 0 ... 10000 {
        if countries.insert(name <- "abc").statement.failed {
            return .Rollback
        }
    }

    return .Commit
}
于 2015-06-29T05:10:35.297 に答える