Sie wählen die obersten 50 Zeilen geordnet nach e.uon desc
aus . Ein Index, der mit uon
beginnt beschleunigt die Abfrage:
create index IX_Empl_Uon on dbo.empl (uon)
Der Index ermöglicht es SQL Server, die obersten N Zeilen dieses Index zu scannen. N ist die höchste Zahl in Ihrer Paginierung:Für die dritte Seite mit 50 Elementen ist N gleich 150. SQL Server führt dann 50 Schlüsselsuchen durch, um die vollständigen Zeilen aus dem gruppierten Index abzurufen. Soweit ich weiß, ist dies ein Lehrbuchbeispiel dafür, wo ein Index einen großen Unterschied machen kann.
Nicht alle Abfrageoptimierer sind schlau genug, um zu bemerken, dass row_number() over ... as rn
steht mit where
rn between 1 and 50
bedeutet die obersten 50 Reihen. Aber SQL Server 2012 tut es. Es verwendet den Index sowohl für die erste als auch für die nachfolgenden Seiten, wie row_number() between 50 and 99
.