SQLite执行非常慢非查询

本文关键字:查询 非常 执行 SQLite | 更新日期: 2023-09-27 18:01:12

我使用的是SQLite,但当我开始执行非查询时,可能会有10k多个命令[.sql file]。我发现它非常慢,可能需要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执行非常慢非查询

SQLite的问题是在事务中有换行-插入-更新-删除命令,否则速度会非常慢。您可以使用.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;
}