In diesem Artikel geht es um die Paging-Methode von SQL Server unter Verwendung der SQL Server 2012-Version. Im Folgenden wird pageIndex verwendet, um die Anzahl der Seiten darzustellen, und pageSize stellt die auf einer Seite enthaltenen Datensätze dar. Im Folgenden finden Sie spezifische Beispiele. Legen Sie die Abfrageseite 2 fest. Jede Seite enthält 10 Datensätze.
Lassen Sie uns zunächst über den Unterschied zwischen dem Paging von SQL Server und dem Paging von MySQL sprechen, indem Sie limit (pageIndex-1) und pageSize verwenden. SQL Server verfügt jedoch nicht über das Schlüsselwort limit, sondern nur über das Top Schlüsselwort ähnlich wie limit . Daher ist das Paging problematischer.
Es gibt nur vier Arten von SQL-Server-Paging, die ich kenne: Dreifachschleife; Verwendung des Schlüsselworts „row_number“; Verwendung des Schlüsselworts „offset/fetch next“ (zusammengefasst durch das Sammeln der Methoden anderer Leute im Internet, sollte dies die einzige sein). Eines ist derzeit die Idee dieser vier Methoden, andere Methoden basieren auf dieser Verformung.
Teil der Datensätze in der Schülertabelle, die abgefragt werden sollen
Nehmen Sie zuerst die ersten 20 Seiten, dann die umgekehrte Reihenfolge und nehmen Sie die ersten 10 Datensätze in umgekehrter Reihenfolge, also dass Sie die für das Paging benötigten Daten abrufen können, die Reihenfolge jedoch umgekehrt ist. Sie können die Sortierung dann umkehren oder die Sortierung direkt an das Frontend übergeben.
Es gibt eine andere Methode, die als dieser Art angesehen werden kann. Ich werde den Code hier nicht zeigen, sondern nur über die Idee sprechen, die darin besteht, zuerst die ersten 10 Datensätze abzufragen und diese dann mit „not in“ auszuschließen 10 Datensätze und dann erneut abfragen.
-- 设置执行时间开始,用来查看性能的 set statistics time on ; -- 分页查询(通用型) select * from (select top pageSize * from (select top (pageIndex*pageSize) * from student order by sNo asc ) -- 其中里面这层,必须指定按照升序排序,省略的话,查询出的结果是错误的。 as temp_sum_student order by sNo desc ) temp_order order by sNo asc -- 分页查询第2页,每页有10条记录 select * from (select top 10 * from (select top 20 * from student order by sNo asc ) -- 其中里面这层,必须指定按照升序排序,省略的话,查询出的结果是错误的。 as temp_sum_student order by sNo desc ) temp_order order by sNo asc ;
Zuerst die ersten 11 Datensatzzeilen überschreiben und dann max (id) verwenden, um den größten zu erhalten id. Fragen Sie danach die ersten 10 Elemente in dieser Tabelle erneut ab, fügen Sie jedoch die Bedingung hinzu, wobei id>max(id) ist.
set statistics time on; -- 分页查询(通用型) select top pageSize * from student where sNo>= (select max(sNo) from (select top ((pageIndex-1)*pageSize+1) sNo from student order by sNo asc) temp_max_ids) order by sNo; -- 分页查询第2页,每页有10条记录 select top 10 * from student where sNo>= (select max(sNo) from (select top 11 sNo from student order by sNo asc) temp_max_ids) order by sNo;
Verwenden Sie direkt die Funktion row_number() over(order by id), um die Anzahl der Zeilen zu berechnen und auszuwählen entsprechende Zeile Geben Sie einfach die Zahl zurück, aber dieses Schlüsselwort ist nur in SQL Server 2005 und höher verfügbar.
set statistics time on; -- 分页查询(通用型) select top pageSize * from (select row_number() over(order by sno asc) as rownumber,* from student) temp_row where rownumber>((pageIndex-1)*pageSize); set statistics time on; -- 分页查询第2页,每页有10条记录 select top 10 * from (select row_number() over(order by sno asc) as rownumber,* from student) temp_row where rownumber>10;
set statistics time on; -- 分页查询(通用型) select * from student order by sno offset ((@pageIndex-1)*@pageSize) rows fetch next @pageSize rows only; -- 分页查询第2页,每页有10条记录 select * from student order by sno offset 10 rows fetch next 10 rows only ;
offset A rows, Der erste A-Datensatz wird verworfen, nur die nächsten B-Zeilen werden abgerufen und die B-Daten werden rückwärts gelesen. Ergebnisse und Laufzeit .
create procedure paging_procedure ( @pageIndex int, -- 第几页 @pageSize int -- 每页包含的记录数 ) as begin select top (select @pageSize) * -- 这里注意一下,不能直接把变量放在这里,要用select from (select row_number() over(order by sno) as rownumber,* from student) temp_row where rownumber>(@pageIndex-1)*@pageSize; end -- 到时候直接调用就可以了,执行如下的语句进行调用分页的存储过程 exec paging_procedure @pageIndex=2,@pageSize=10;
Zusammenfassung
Basierend auf der Ausführungszeit der oben genannten vier Paging-Methoden können wir erkennen, dass die Leistung der zweiten, dritten und dritten Methode unter den oben genannten vier Paging-Methoden nahezu gleich ist. Die Leistung der dritten und vierten Paging-Methode ist jedoch ähnlich. Eine davon weist eine schlechte Leistung auf und wird nicht empfohlen. Außerdem testet dieser Blog eine kleine Datenmenge und hat noch keine große Datenmenge ausgelagert. Daher ist nicht klar, welche Methode eine bessere Leistung bietet, wenn eine große Datenmenge ausgelagert werden muss. Ich empfehle hier die vierte Methode. Schließlich handelt es sich bei der vierten Methode um eine neue Methode, die nach dem Upgrade des SQL-Servers eingeführt wurde, sodass sie theoretisch eine bessere Leistung und Lesbarkeit aufweisen sollte.Verwandte Empfehlungen: „
MySQL-TutorialDas obige ist der detaillierte Inhalt vonWelche Paging-Methoden gibt es in SQL Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!