运行SQL查询 - 获取超时

时间:2010-11-01 09:29:19

标签: sql sql-server tsql timeout

SELECT TOP 1 * 
FROM URLForPosting WITH(nolock) 
WHERE status = 0 
ORDER BY newid()

当我在代码中运行时,这是查询我得到超时,即使我在SQL Server上运行它也会超时。

但是当我这样做时

SELECT TOP 1 * 
FROM URLForPosting WITH(nolock) 
WHERE status = 0 

它运行得非常好。

此外,第一个查询运行正常,直到前6个记录缺少记录,其总共8个缺少现在它给出了超时?我已经创建了状态索引。

有什么建议吗?

2 个答案:

答案 0 :(得分:4)

返回随机记录的另一种方法是使用TABLESAMPLE。看看它的表现如何:

SELECT TOP 1 * 
FROM URLForPosting TABLESAMPLE(1) WITH(nolock) 
WHERE status=0 
ORDER BY newid()
SQL Server 2005及更高版本中提供了

TABLESAMPLE

答案 1 :(得分:0)

由于当你有600K记录且挂起800K时运行正常,因此插入可能导致索引碎片化。让您的DBA(或拥有db_owner权限的人)运行DBCC DBREINDEX(URLForPosting)

或者对于2005版本以上版本,您可以使用ALTER INDEX REBUID