e.uon desc
で並べ替えられた上位 50 行を選択しています 。 uon
で始まるインデックス クエリを高速化します:
create index IX_Empl_Uon on dbo.empl (uon)
このインデックスにより、SQL Server はこのインデックスの上位 N 行をスキャンできます。 N is the maximum number in your pagination:for the three page of 50 elements, N equals 150. 次に、SQL Server は 50 回のキー ルックアップを実行して、クラスター化インデックスから完全な行を取得します。私の知る限り、これはインデックスが大きな違いを生み出すことができる教科書的な例です.
すべてのクエリ オプティマイザーが、row_number() over ... as rn
に気付くほど賢いわけではありません。 where
rn between 1 and 50
上位 50 行を意味します。しかし、SQL Server 2012 にはあります。 row_number() between 50 and 99
のように、最初のページと連続するページの両方にインデックスを使用します 。