Heim >Datenbank >MySQL-Tutorial >Wie kann ich Ergebnisse in SQL Server unter Berücksichtigung der Leistung und des Gesamtabrufs effizient paginieren?

Wie kann ich Ergebnisse in SQL Server unter Berücksichtigung der Leistung und des Gesamtabrufs effizient paginieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-22 00:56:13912Durchsuche

How Can I Efficiently Paginate Results in SQL Server, Considering Performance and Total Count Retrieval?

Effizientes Paging: Leistung und vollständiger Abruf in SQL Server

In der Welt der Datenbankverwaltung ist effizientes Paging von entscheidender Bedeutung, um große Datenmengen zu verarbeiten und ein benutzerfreundliches Browsing-Erlebnis zu bieten. In diesem Artikel werden Best Practices für das Ergebnis-Paging in den Versionen Microsoft SQL Server 2000 bis 2012 unter Berücksichtigung der Leistung und der Gesamtzahl der abgerufenen Ergebnisse untersucht.

SQL Server 2000-2008: Zeilennummern und ANZAHL

Für frühere Versionen von SQL Server bestand ein gängiger Ansatz darin, die Funktion ROW_NUMBER() zu verwenden, um jeder Zeile in der Tabelle eine Seriennummer zuzuweisen. Mithilfe dieser Seriennummer können die Ergebnisse dann nach der gewünschten Seitenzahl und Seitengröße gefiltert werden. Um die Gesamtzahl abzurufen, können Sie die Funktion COUNT() als Unterabfrage verwenden.

Beispiel:

<code class="language-sql">-- 分页
SELECT *
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNum, *
    FROM TableName
) AS PaginatedTable
WHERE RowNum BETWEEN ((@Page - 1) * @PageSize + 1) AND (@Page * @PageSize)

-- 总数
SELECT COUNT(*) AS TotalCount
FROM TableName</code>

SQL Server 2012: OFFSET und FETCH

Mit der Einführung von SQL Server 2012 bieten die OFFSET- und FETCH-Klauseln eine direktere und effizientere Paging-Methode.

Beispiel:

<code class="language-sql">SELECT *
FROM TableName
ORDER BY id
OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;</code>

Diese Abfrage überspringt die ersten 10 Zeilen (OFFSET 10 ROWS) und ruft die nächsten 10 Zeilen ab (NUR NÄCHSTE 10 REIHEN FETCH). Die ORDER BY-Klausel ist erforderlich, damit OFFSET und FETCH ordnungsgemäß funktionieren.

Hinweis:

  • ORDER BY ist erforderlich, wenn OFFSET und FETCH verwendet werden.
  • OFFSET muss mit FETCH verwendet werden.
  • Im selben Abfrageausdruck kann TOP nicht in Kombination mit OFFSET und FETCH verwendet werden.

Fazit

Die beste Möglichkeit, Ergebnisse in SQL Server zu paginieren, hängt von der jeweils verwendeten Version ab. Während die Methode ROW_NUMBER() bei älteren Versionen noch möglich ist, bieten OFFSET und FETCH in SQL Server 2012 und späteren Versionen eine effizientere und einfachere Lösung.

Das obige ist der detaillierte Inhalt vonWie kann ich Ergebnisse in SQL Server unter Berücksichtigung der Leistung und des Gesamtabrufs effizient paginieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn