我发现与使用 LINQ to SQL 执行查询相关的超时问题。所以我做了一个简单的控制台程序,问题仍然发生,不是总是发生,但随机发生的次数足以让我担心。这几乎是我的整个程序:
public static TransactionDataContext DataContext = new TransactionDataContext();
static void Main(string[] args)
{
int year = ...;
int stateCode = ...;
DateTime minYear = new DateTime(year, 01, 01);
DateTime maxYear = new DateTime(year, 12, 31);
var volumes = DataContext.TRANSACTIONs.Where(p =>
p.STATE_NO == stateCode &&
p.TRANS_DATE >= minYear &&
p.TRANS_DATE <= maxYear).OrderBy(p => p.TRANS_DATE);
}
我的数据库中的 TRANSACTION 表有 10M+ 条记录。在最后一个右大括号处设置断点后,我运行调试器。有时,展开卷变量和结果 View 会显示数据,有时会显示“函数评估超时”。通过设置 DataContext.CommandTimeout 来延长超时似乎没有帮助,而且我认为这不是解决方案。
我的问题是为什么 LINQ to SQL 有这种限制,或者我是否做错了。
更新:从 Management Studio 运行 SQL 语句是可以的,所以我不认为这是索引问题。
最佳答案
这可能是 SQLServer 问题而不是 LINQ 问题。 您需要 TRANS_DATE
和 STATE_NO
的覆盖索引。如果您没有 then,那就可以解释问题,并且这不是 LINQ 问题。
关于sql-server - 使用 LINQ to SQL 查询大表(10M+行)导致超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4662898/