دوست عزیز،
من دو حدس میتوانم بزنم:
یکی اینکه شما روی فیلدی که Min یا Max میگیرید، ایندکس نساخته اید. ولی با توجه به اینکه گفته شد این فیلد کلیدی است، پس Primary Key بوده و ایندکس دارد. پس حدس من غلط است.
دوم اینکه شما برای مثلا انتخاب رکورد بعدی، کل رکوردهای بعد از اون رو انتخاب میکنید و بعد کوچکترین رو برمیدارید. اما به اعتقاد من Procedure که برای گرفتن رکورد بعدی استفاده میشود، بهتر است چیزی شبیه به این باشد:
Create Proc MyPrco1 @KeyValue as int as
declare @NextKey int
select @NextKey=min(KeyColumn) from MyBigTable where KeyColumn>@KeyValue
select * from MyBigTable where KeyColumn=@NextKey
ضمنا شما به دلیل تحت شبکه بودن برنامه، مجبور به خواندن رکوردها به طور پی در پی از بانک اطلاعاتی نیستید. میتونید مثلا در دسته های 50تایی از بانک بخوانید، موقع برگرداندن رکوردهای ویراش شده کنترل کنید که هر رکورد از زمان آخرین خوانده شدن، توسط کاربر دیگری ویرایش شده یا نه.
البته امیدوارم هدف شما رو درست متوجه شده باشم