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;
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
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;
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
sim tem razão! eu alterei o código aqui pra exemplificar e não me atentei a isso. Valeu pela atenção!