在连接外键上的记录时,我遇到了非常慢的查询执行。例如,我有一个"GraphPoint"类,它保存日期时间/双对。这个查询在不到一秒的时间内执行150000条记录(value的虚拟数字):
var data = from x in dataContext.Table1
select(new GraphPoint(x.Time, 100));
List<GraphPoint> graphPoints = new List<GraphPoint>(data);
当我尝试在外键上链接第二个表时,执行速度慢得像爬行。一个小时后,我放弃了这个查询:
var data = from x in dataContext.Table1
select(new GraphPoint(x.Time, x.Table2.First().Value));
List<GraphPoint> graphPoints = new List<GraphPoint>(data);
为什么它比第一个慢?
我试过使用预编译查询,但也没有帮助。
使用DataContext.Log属性查看正在生成的确切SQL,然后调查是否可以在数据库端执行任何操作来优化查询性能(例如添加索引)。
用table1加载第二个表可能会提高这里的性能,
试
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Table1>(x => x.Table2);
dataContext.LoadOptions = dlo;
Linq正在将其转换为动态sql,并动态地获取table1中相关表记录的每条记录,这降低了性能。