SQL使用了很多CPU

时间:2011-11-26 00:11:47

标签: sql-server performance entity-framework ado.net

我有一个数据库同步作业,我在XML中循环遍历1000多行,并使用EF4.1更新数据库表格中的任何更改

我的代码是:

using (context = new MyDbContext())
 {
      foreach (var row in document.Elements("row"))
      {
           //DO UPDATING IN HERE.
           //Part of which I call
            var results = context.Set(type).SqlQuery("select top 1 * from " + type.Name + " where ExternalId=@p0", id);  // this is the SQL running too long
              return results.Cast<MyObject>().FirstOrDefault();
        }
}

“选择前1名...”查询似乎是失败的查询。 可能是什么问题呢。我应该在For循环中声明我的上下文吗?

2 个答案:

答案 0 :(得分:1)

我可以看到一个缓慢的解释是你在查询的表中没有ExternalId的索引 - 所以你正在执行全表扫描而不是索引查找。

你的查询目前没有多大意义 - 你有一个foreach但是返回你要加载的第一个结果 - 为什么循环呢?

如果在循环中运行此问题,另一个问题是您正在进行非常昂贵的N次数据库往返。如果您只是尝试加载一组与XML中找到的ID匹配的实体,我会批量加载它们。只需执行Contains()查询并传入一组ID。

答案 1 :(得分:0)

建议先从数据库加载所有数据,然后在结果集合中更新foreach中的每个实体。