Bir görevler kuyruğu depolayan bir tablom var.SQL Server: Tablodaki bir kaydın yerini (ordinal) alın
Id | Operation | Argument | Status
Operasyon bir dize
Argüman tek sayı
Durum olduğunu biridir: Queued
, Busy
, Complete
, Failed
Bir bir pozisyon anlamaya ihtiyacımız gibi her görev görünüyor sıradaki öğe, ancak sıraya alınmayan görevleri atlamanız gerekir.
Örnek:
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
beklenen pozisyon x
talep anlamsız olduğu anlamına gelir --
konumunu izler.
Soru: Ne tür konumunu hesaplamak için iyi bir yol olurdu? Şu anda
yapmam: İngilizce
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
: haydi,
Endişem performans (benim görevidir) benim görev kadar her görevin pozisyonlarını hesaplayın ve bana son pozisyon vermek 1000 kayıtlarım olduğunu ve çok sayıda isteğim olduğunu (her saniyede 100) söylüyorum.
Veritabanı SQL Server 2008
Sorgu doğru ve OK yapmalı. "endişe performanstır": aslında yavaş mı yoksa yavaş olacağını mı düşünüyorsunuz (IOW, yavaşlığını test ettiniz mi)? – smirkingman
@smirkingman: Erken optimizasyon yapıyorum. –