这个查询是从一个非常长的动态后续存储过程生成的——该过程返回从给定索引开始的请求记录数,以显示在 Telerik Radgrid 中,有效地处理分页。存储过程输出的简化版本:
SELECT r.* FROM (
SELECT ROW_NUMBER() OVER(ORDER BY InventoryId DESC) as row,
v.* FROM vInventorySearch v
) as R WHERE [ROW] BETWEEN 1 AND 10
当“BETWEEN”子句介于 1 和 10 之间时,它会在几分之一秒内运行,但如果它介于 10000 和 1010 之间,则执行几乎需要整整一分钟。
我觉得我可能在这里遗漏了一些基本的东西,但在我看来,我检索哪 10 条记录并不重要,它应该花费相同的时间。
感谢您的任何意见,我期待着尴尬!
解决方案,由 Martin Smith 提供(下):
SELECT r.*, inv.* FROM
(
SELECT ROW_NUMBER() OVER(ORDER BY InventoryId DESC) as row, v.InventoryID
FROM vInventorySearch v
WHERE 1=1
) as R
inner join vInventory inv on r.InventoryID = inv.InventoryID
WHERE [ROW] BETWEEN 10001 AND 10010
谢谢你的帮助!