【发布时间】:2014-05-08 20:14:08
【问题描述】:
我有一个用 MVC 4 和 Entity Framework 6 编写的电子邮件营销 Web 应用程序。该应用程序将 10K 多个电子邮件地址以及联系信息存储在网络场的 sql 数据库中。
当数据库很小,只有几百条记录时,一切正常。但是,当我完全填充数据库时,使用“Foreach”语句检索和写入每条记录的速度非常缓慢。对于某些操作,最多可能需要 14 分钟才能完成。我试图在任何时候尽量减少我使用的记录数量,但这会使应用程序变得笨拙。
我想知道,有没有其他方法可以用来加快速度。可能是 SQL 存储过程,或者 GitHub 上的一些东西可以让它变得更容易。如果有,请告诉我在哪里可以了解更多信息。任何帮助,将不胜感激。这是其中一个查询。
private int AddOrUpdateCampaigns(Campaign campaign
, IEnumerable<AssignEmailContacts> assignEmailContacts)
{
DataBaseContext db = new DataBaseContext();
int TotalAssigned = 0;
if (assignEmailContacts == null) return(TotalAssigned);
if (campaign.CampaignId != 0)
{
foreach (var emailContact
in assignEmailContacts.Where(a => a.Assigned == false))
{
campaign.EmailContacts.Remove(
db.EmailContacts.Find(emailContact.EmailContactId));
}
foreach (var emailContact
in assignEmailContacts.Where(a => a.Assigned))
{
campaign.EmailContacts.Add(
db.EmailContacts.Find(emailContact.EmailContactId));
TotalAssigned += 1;
}
}
return (TotalAssigned);
}
【问题讨论】:
-
10K 记录是一个小数据库:)
-
10K 不是一个大型数据库。您的查询是什么样的?您是否想一次全部收回所有记录?
-
@Dismissile 同意你的看法。看到在这样的数据库上执行 14 分钟的查询会很有趣
-
我确信 marcgravell 会谈到速度和 EF 的含义,但我会研究 SPROC 或批处理执行。如果您在迭代中更新(每次调用 SaveChanges)肯定会增加延迟。
-
正如其他人所说,10K是一个非常小的数据库,但回答你的问题,对于批量操作,存储过程会更快,应该使用。看看这个。 stackoverflow.com/questions/2698151/…
标签: c# sql asp.net-mvc entity-framework