我们有一个有趣的表查询(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字段是必需的数字。
桌子上没有打开或活动的锁。这是一个每天写一次的统计表。
答案 0 :(得分:2)
您可能有一个锁定2011
行的打开事务。尝试使用NOLOCK
提示进行确认。
如果返回结果而没有被阻止,那么你可以通过在没有提示的情况下再次运行来找到罪魁祸首spid,然后在阻塞发生时查看sys.dm_tran_locks
。
答案 1 :(得分:2)
请你运行这个查询:
SELECT year, COUNT(*)
FROM statistics
GROUP BY
year
如果2010
和2012
中的记录很少,但2011
中有大量记录,则查询运行时间更长是完全正常的。