【发布时间】:2012-05-15 09:26:44
【问题描述】:
我真的很难解决这个问题。当我使用以下代码更新我的数据库以获取大量记录时,它运行速度非常慢。我有 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列上是否有索引? -
'CatItem CatItem' 与您的命名不一致。而是使用'var catItem'。它只是提高了可读性(本地人的大小写)
标签: c# sqlite executenonquery journal