Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Reads werden nicht niedrig, nachdem ein Index gesetzt wurde

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 .