DataARTIGO

Paginando dados com OffSet e Fetch

Uma nova forma de realizar paginação na busca de informações no SQL Server é utilizando as cláusulas Offset/Fetch que foram criadas no SQL Server 2012.

Uma nova forma de realizar paginação na busca de informações no SQL Server é utilizando as cláusulas Offset/Fetch que foram criadas no SQL Server 2012. Veja como é a sintaxe:

select firstname,lastname from person.person
order by businessentityID
offset 0 rows
fetch next 10 rows only

No exemplo acima, estamos buscando as primeiras 10 linhas da tabela person (banco adventureworks2012). Para buscar as próximas 10 linhas, basta alterar para que fique da seguinte forma:

select firstname,lastname from person.person
order by businessentityID
offset 10 rows
fetch next 10 rows only

Porém nem tudo são flores. Para gerar o efeito da instrução offset, saltando linhas, o SQL Server utiliza um index scan. O total de linhas do scan é o total somando do offset mais o fetch, conforme mostra a figura abaixo.

Screenshot-108_thumb1

Dessa forma, existe uma perda gradual de performance conforme avançamos na paginação com offset/fetch, até atingir o pior cenário possível, na última página.

Assim sendo, o uso de offset/fetch é muito prático, mas deve ser limitado a result sets não muito grandes, pois para result sets maiores a perda de performance ao longo das páginas pode ser considerável.

Tem mais de 20 anos de experiência na área de TI, atua como diretor da Búfalo Informática, conhecida empresa de treinamentos no Rio de Janeiro e agora treinamentos online. Possui certificações MCT (Trainer), MCPD (Professional Developer), MCSE (Solution Expert Data Platform e BI), entre diversas outras. Lidera o grupo de usuários devASPNet (https://www.facebook.com/devaspnet) e o PASS Chapter devSQL (http://facebook.com/devsql). É mergulhador nas horas vagas.

Ver perfil