This question already has answers here:
SQLite Insert very slow?

(4个答案)


已关闭8年。




好吧,我正在使用SQLite,但是当我开始执行非查询时,大概有10k +条命令[.sql文件]。我发现,将信息添加到数据库可能要花费10分钟以上的时间,速度非常慢。

无论如何,这是我的ExecuteNonQuery代码。
public int ExecuteNonQuery(string sql)
{
    var cnn = new SQLiteConnection(_dbConnection);
    cnn.Open();
    var mycommand = new SQLiteCommand(cnn) {CommandText = sql};
    int rowsUpdated = mycommand.ExecuteNonQuery();
    cnn.Close();
    return rowsUpdated;
}

我希望有一种方法可以使它花费几秒钟来完成。

最佳答案

SQLite的问题在于,您在事务中具有包装insert-update-delete命令,否则会很慢。您可以使用.NET数据提供程序中内置的事务支持来执行此操作,或者由于正在读取.sql文件,因此可以将第一行begin transaction和最后一行commit transaction设置为。两种方法都应该起作用。

如果要在.sql文件中执行此操作,则它可能看起来像这样。

begin transaction;

insert into ...;
update ...;
delete ...;

commit transaction;

或者,如果您在代码中执行此操作,它将看起来像这样。
public int ExecuteNonQuery(string sql)
{
    var cnn = new SQLiteConnection(_dbConnection);
    cnn.Open();
    var transaction = cnn.BeginTransaction();
    var mycommand = new SQLiteCommand(cnn) {CommandText = sql};
    mycommand.Transaction = transaction;
    int rowsUpdated = mycommand.ExecuteNonQuery();
    transaction.Commit();
    cnn.Close();
    return rowsUpdated;
}

关于c# - SQLite ExecuteNonQuery非常慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15099484/

10-16 10:37