SQL Server奇怪超时疑难解答

时间:2016-01-26 12:16:45

标签: sql sql-server timeout

我有一个相当通用的选择查询。当我选择特定结果集的前1245个结果时,它会按预期在不到一秒的时间内运行。但是,如果我运行1246,它会像在无限循环中一样连续运行。我检查了行1245和1246的格式,其数据显示完全正常。我也可以在一个编号超过2300的单独用户组上运行相同的查询,这个用户几乎立即运行,这使我认为它与内存问题无关。

作为查询格式的快速示例:

SELECT TOP 1246 a.id, 
(SELECT TOP 1 col_1 FROM table_1 t INNER JOIN table_2 c ON t.id=c.id WHERE t.id=a.id) AS [columnAlias]
FROM table_3 a

对任何有关故障排除的想法持开放态度。

如果我能提供其他可能有用的东西,请问。

2 个答案:

答案 0 :(得分:1)

性能差异可能是由于执行计划的变化。您可能想要检查统计信息是否是最新的。

其次,您的查询确实没有意义,因为子查询与外部查询没有关系。所以,您可能会接受您将获得单个值并将其移至from子句:

SELECT TOP 1246 a.id, col_1 AS [columnAlias]
FROM table_3 a CROSS JOIN
     (SELECT TOP 1 col_1 FROM table_1 t INNER JOIN table_2 c ON t.id=c.id);

最后,如果您对查询有其他意图,则应该提出另一个问题。如果你修改了你的问题,你可能会使这个回答无效。

答案 1 :(得分:0)

当你到达一个特定的记录时,“在无限循环中连续运行”让我怀疑你遇到了死锁的情况。你发布的内容中没有任何明显的东西可以引起它,所以我怀疑有一个上下文在哪里运行,例如这是几步交易的一部分,可能是原因。