sql-server - 使用 LINQ to SQL 查询大表(10M+行)导致超时

标签 sql-server linq linq-to-sql

我发现与使用 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_DATESTATE_NO 的覆盖索引。如果您没有 then,那就可以解释问题,并且这不是 LINQ 问题。

关于sql-server - 使用 LINQ to SQL 查询大表(10M+行)导致超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4662898/

相关文章:

sql-server - SQL Server 2005 中的排序层次查询

c# - Linq 表达式树 Any() 问题

c# - Linq 查询以在列表 c# 的列表中过滤 id

c# - 如何使用 linq-to-sql 同时增加页面浏览量?

c# - LINQ to SQL 查询以确定值是否以数字开头

php - PDO错误: could not find driver (SQL Server connect)

sql-server - 如何使用 CMD 将 SQL Server 实例 TCP 端口更改为 1433?

asp.net-mvc - ASP MVC : When is IController Dispose() called?

php - 如何处理/优化数千个不同的执行 SELECT 查询?

c# - 缓冲与流式传输大型数据集