DEV Community

loading...

Discussion on: Dica R√°pida: Paginando no MSSQL considerando escala

Collapse
silverio27 profile image
Lucas Silvério

Boa! Eu acabei chegando nessa conclus√£o tb, mas nunca tinha usado o WITHūüė∂.
Tem diferença no desempenho nas abordagens abaixo:

-- SUBQUERY
select * from (
select row_number() over (order by CreatedAt desc) as row#, Id,
CreatedAt,
Name,
Email
from [User]) as result
where row# >= @LastRowNumber and row# <= @PageSize;

-- WITH
with pagedUsers as (
select row_number() over (order by CreatedAt desc) as row#, Id,
CreatedAt,
Name,
Email
from [User])
select top @PageSize * from pagedUsers
where row# >= @LastRowNumber;

Thread Thread
wsantosdev profile image
William Santos Author

Entendo que não haja diferença no desempenho, não. Optei pelo WITH por fazer parte da sintaxe CTE (Common Table Expressions), que entendo ser mais expressiva.

Na subquery voc√™ pode usar tamb√©m o TOP para obter o n√ļmero de registros igual a @PageSize, seguindo o exemplo do WITH. E, no caso da cl√°usula WHERE da subuqery, colocar row# >= @LastRowNumber and row# <= @PageSize vai deixar de funcionar na segunda p√°gina! rs

Thread Thread
silverio27 profile image
Lucas Silvério

sim tem razão! eu alterei o código aqui pra exemplificar e não me atentei a isso. Valeu pela atenção!