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个缺少现在它给出了超时?我已经创建了状态索引。
有什么建议吗?
答案 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。