【发布时间】:2013-06-04 16:03:45
【问题描述】:
我有这个循环:
using(var db = new MainContext())
{
var q = db.tblInternalURLs;
foreach (var rec in q)
{
db.ExecuteCommand("UPDATE tblInternalURLS SET hash = '" + LoginAPI.GetSha1(rec.URL) + "' WHERE ID = " + rec.ID);
}
}
将更新查询转换为db.ExecuteCommand 大大提高了速度,但是我想知道是否有更快的方法来执行这些查询,因为超过 2,000,000 条记录仍然需要很长时间。我相信很多开销都在最初的 LINQ 查询中。这是正确的吗?
【问题讨论】:
-
这取决于
tblInternalURLs是什么。如果可以用一条sql命令写,可以,可以改进,否则不行。 -
你可能会用更快的 select 子句替换
var q = db.tblInternalURLs;... 看看 hivemind 的想法会很有趣... -
如果这只是对 sql server 表的迭代,
UPDATE tblInternalURLS SET hash = hashbytes('sha1', url) -
@Xander 这就是为什么它是评论,而不是答案。它非常适合作为评论,非常值得做。
-
@Servy 我希望这个问题不会因此而被否决......