我有一个存储任务队列的表。每个任务看起来都像:
Id | Operation | Argument | Status
操作是字符串
参数是单个数字
状态是:
Queued
,
Busy
,
Complete
,
Failed
我需要找出一个项目在队列中的位置,但需要跳过未排队的任务。
例子:
1 A 5 Queued -- 1
2 A 6 Queued -- 2
3 B 3 Busy -- x
4 B 4 Complete -- x
5 A 8 Queued -- 3
预期位置如下
--
位置
x
意味着请求毫无意义。
问题:
什么是计算这种位置的好方法?
现在我想:
SELECT TOP 1 p.Position FROM
(
SELECT Id, Status,
ROW_NUMBER() over (order by Id) as Position
from QueuedJobs where Status = 0 AND Id <= @taskId
) as p
order by Position desc
英语:计算每个任务到我的任务的位置,并给我最后一个位置(这是我的任务)
我关心的是性能,假设我有1000个记录,有很多请求(每秒100个)。
数据库是SQL Server 2008