【发布时间】:2017-02-12 11:14:18
【问题描述】:
我要计算相关表的行数:
MainTable tbl = tblInfo(id);
var count = tbl.Related_Huge_Table_Data.Count();
问题是:这需要很长时间(大约 20 秒)才能执行,尽管当我在 Sql Server 中运行此查询时,它执行不到一秒。如何在 linq 中优化此查询?我也尝试使用存储过程,但没有运气。
这是tblInfo 方法:
public MainTable tblInfo(int id)
{
MyDataContext context = new MyDataContext();
MainTable mt = (from c in context.MainTables
where c.Id == id
select c).SingleOrDefault();
return mt;
}
我使用的是 LinqToSql,类是由 LinqToSql 生成的。
【问题讨论】:
-
Related_Huge_Table_Data返回什么? -
@GSerg 它在我的 linqtosql 中定义为
EntitySet,如下所示:public EntitySet<Related_Huge_Table_Data> Related_Huge_Table_Data -
如果你想要服务器端操作,你 don't want to use
EntitySet。 -
你应该放弃
EntitySet。按照设计,它会在处理之前将所有数据加载到内存中。 -
正如@GSerg 所说,最好的方法是从 Child 集合开始并按 parent 过滤。另外,添加 ParentId 的索引(如果你没有)。如果您仍然有问题,那么问题就在其他地方。尝试使用此 context.Database.Log= Console.WriteLine; 查看生成的 SQL
标签: c# sql-server linq linq-to-sql