【发布时间】:2016-05-03 00:08:40
【问题描述】:
我有一个相当通用的选择查询。当我选择特定结果集的前 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
欢迎任何关于故障排除的想法。
如果我能提供任何其他可能有帮助的信息,请尽管询问。
【问题讨论】:
-
发布查询计划可能会提供一些见解。此外,使用
TOP 1而不使用ORDER BY没有多大意义。在性能方面,对列使用相关子查询通常也是一个坏主意。您应该能够使用普通的JOINs 轻松执行所有这些逻辑。 -
这种方法的问题是,如果你修复了这个性能问题然后重构它,那么 SQL Server 可能会选择一个新的查询计划,现在你已经做了很多工作来纠正一个性能问题对于从未真正使用过的代码 - 因为现在你有了新代码。
-
是的,好点。我现在将重新考虑它,看看它是否会影响上一期。如果是这样,我会为它提出一个新问题,因为这个问题将不再相关。感谢您的意见。
标签: sql sql-server timeout