Heim  >  Artikel  >  Datenbank  >  Welche Paging-Methoden gibt es in SQL Server?

Welche Paging-Methoden gibt es in SQL Server?

醉折花枝作酒筹
醉折花枝作酒筹nach vorne
2021-08-06 09:22:003909Durchsuche

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

Welche Paging-Methoden gibt es in SQL Server?

Methode 1: Dreifachschleife

Idee

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.

Code-Implementierung

-- 设置执行时间开始,用来查看性能的
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
;

Abfrageergebnisse und -zeit

Welche Paging-Methoden gibt es in SQL Server?

Welche Paging-Methoden gibt es in SQL Server?

Methode 2: Verwenden Sie max (Primärschlüssel)

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.

Code-Implementierung

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;

Abfrageergebnisse und -zeit

Welche Paging-Methoden gibt es in SQL Server?

Welche Paging-Methoden gibt es in SQL Server?

Methode 3: Verwenden Sie das Schlüsselwort row_number

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.

SQL-Implementierung

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;

Abfrageergebnisse und -zeit

Welche Paging-Methoden gibt es in SQL Server?

Welche Paging-Methoden gibt es in SQL Server?

Vierte Methode: offset /fetch next (nur in Version 2012 und höher verfügbar)

Code-Implementierung

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 .

Gespeicherte Paging-Prozedur

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;

ZusammenfassungWelche Paging-Methoden gibt es in SQL Server?

  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.

Welche Paging-Methoden gibt es in SQL Server?Verwandte Empfehlungen: „

MySQL-Tutorial

Das 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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen