このクエリは、非常に長い動的な Sequel ストアド プロシージャから生成されます。このプロシージャは、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 の間の場合は、実行にほぼ 1 分かかります。
ここで何か基本的なことが欠けているように感じますが、どの 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
ご協力いただきありがとうございます!