Поскольку вы работаете в SQL 2005, попробуйте использовать функцию ROW_NUMBER ():
http://msdn.microsoft.com/en-us/library/ms186734.aspx
В основном что-то вроде:
SELECT * FROM Table WHERE (ROW_NUMBER() OVER Date ASC) = @RecNo
Возможно, вам придется использовать подзапрос или CTE, чтобы использовать значение ROW_NUMBER()
в предикате.
Я не знаю, будет ли это быстрее, чем NEWID()
. Зависит от того, будет ли SQL закорачивать операцию ROW_NUMBER()
, когда найдет искомое значение. В худшем случае он выдает ROW_NUMBER()
для каждой строки, в лучшем случае он останавливается, как только находит строку (которая может быть первой строкой ..).
Также возможно, что создание ROW_NUMBER()
для каждой строки значительно быстрее, чем создание GUID или иная сортировка всей таблицы.