我真的很努力解决这个问题。当我使用以下代码更新数据库中的大量记录时,它运行速度非常慢。我有 500,000 条记录需要更新,这需要近一个小时。在此操作期间,日志文件增长缓慢,主 SQLite db3 文件几乎没有变化 - 这是正常的吗?
只有当我有大量或记录需要更新时,该操作才会出现问题 - 它几乎可以立即在较少数量的记录上运行。
在此代码运行之前,会在数据库上执行一些其他操作,那么它们是否会占用数据库?我已尝试确保所有其他连接均已正确关闭。
感谢您的建议
using (SQLiteConnection sqLiteConnection = new SQLiteConnection("Data Source=" + _case.DatabasePath))
{
sqLiteConnection.Open();
using (SQLiteCommand sqLiteCommand = new SQLiteCommand("begin", sqLiteConnection))
{
sqLiteCommand.ExecuteNonQuery();
sqLiteCommand.CommandText = "UPDATE CaseFiles SET areaPk = @areaPk, KnownareaPk = @knownareaPk WHERE mhash = @mhash";
var pcatpk = sqLiteCommand.CreateParameter();
var pknowncatpk = sqLiteCommand.CreateParameter();
var pmhash = sqLiteCommand.CreateParameter();
pcatpk.ParameterName = "@areaPk";
pknowncatpk.ParameterName = "@knownareaPk";
pmhash.ParameterName = "@mhash";
sqLiteCommand.Parameters.Add(pcatpk);
sqLiteCommand.Parameters.Add(pknowncatpk);
sqLiteCommand.Parameters.Add(pmhash);
foreach (CatItem CatItem in _knownFiless)
{
if (CatItem.FromMasterHashes == true)
{
pcatpk.Value = CatItem.areaPk;
pknowncatpk.Value = CatItem.areaPk;
pmhash.Value = CatItem.mhash;
}
else
{
pcatpk.Value = CatItem.areaPk;
pknowncatpk.Value = null;
pmhash.Value = CatItem.mhash;
}
sqLiteCommand.ExecuteNonQuery();
}
sqLiteCommand.CommandText = "end";
sqLiteCommand.ExecuteNonQuery();
sqLiteCommand.Dispose();
sqLiteConnection.Close();
}
sqLiteConnection.Close();
}
最佳答案
首先要确保你在 mhash 上有索引。 将命令分组。 使用多个线程。
或[插入]
将记录批量导入到临时表中。在 mhash 列上创建索引。执行单个更新语句来更新记录。
关于c# - SqLite C# 更新速度极慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10597823/