过滤器值会导致查询失败

时间:2011-01-27 17:12:27

标签: sql sql-server-2008

我们有一个有趣的表查询(SQL Server 2008),它使用不同的字段值失败。谁看过这个吗?

运行正常(500毫秒)

SELECT ROW_NUMBER() OVER (ORDER BY StatisticNo asc) AS RowId, Statistics.* 
FROM Statistics 
WHERE myear = 2010

这在很长一段时间(> 3分钟)后完成

SELECT ROW_NUMBER() OVER (ORDER BY StatisticNo asc) AS RowId, Statistics.* 
FROM Statistics 
WHERE myear = 2011

该表包含2010年和2011年的数据。有趣的是,它在2012年运行良好,作为过滤选项,目前是空集。我们检查了规范化问题,没有丢失或空数据。 myear字段是必需的数字。

桌子上没有打开或活动的锁。这是一个每天写一次的统计表。

2 个答案:

答案 0 :(得分:2)

您可能有一个锁定2011行的打开事务。尝试使用NOLOCK提示进行确认。

如果返回结果而没有被阻止,那么你可以通过在没有提示的情况下再次运行来找到罪魁祸首spid,然后在阻塞发生时查看sys.dm_tran_locks

答案 1 :(得分:2)

请你运行这个查询:

SELECT  year, COUNT(*)
FROM    statistics
GROUP BY
        year

如果20102012中的记录很少,但2011中有大量记录,则查询运行时间更长是完全正常的。