sql >> Databáze >  >> RDS >> Sqlserver

SQL Server 2008 metody stránkování?

Následující uložená procedura T-SQL je velmi efektivní implementace stránkování. Optimalizátor SQL dokáže najít první ID velmi rychle. Zkombinujte to s použitím ROWCOUNT a získáte přístup, který je efektivní z hlediska CPU i čtení. U tabulky s velkým počtem řádků určitě překoná jakýkoli přístup, který jsem viděl pomocí dočasné tabulky nebo proměnné tabulky.

Poznámka:V tomto příkladu používám sloupec sekvenční identity, ale kód funguje na jakémkoli sloupci vhodném pro řazení stránek. Také zalomení sekvencí v používaném sloupci neovlivňuje výsledek, protože kód vybírá spíše počet řádků než hodnotu sloupce.

EDIT:Pokud třídíte podle sloupce s potenciálně nejedinečnými hodnotami (např. Příjmení), přidejte druhý sloupec do klauzule Order By, aby byly hodnoty řazení opět jedinečné.

CREATE  PROCEDURE dbo.PagingTest
(
    @PageNumber int,
    @PageSize int
)
AS

DECLARE @FirstId int, @FirstRow int

SET @FirstRow = ( (@PageNumber - 1) * @PageSize ) + 1
SET ROWCOUNT @FirstRow

-- Add check here to ensure that @FirstRow is not
-- greater than the number of rows in the table.

SELECT   @FirstId = [Id]
FROM     dbo.TestTable
ORDER BY [Id]

SET ROWCOUNT @PageSize

SELECT   *
FROM     dbo.TestTable
WHERE    [Id] >= @FirstId
ORDER BY [Id]

SET ROWCOUNT 0
GO 


  1. Funkce formátu data serveru SQL Server

  2. Vraťte počet dní v měsíci v MariaDB

  3. Výkon SQL Serveru TOP IO Query -1

  4. Jak opravit zastaralé oracle.sql.ArrayDescriptor, oracle.sql.STRUCT a oracle.sql.StructDescriptor