SQL - limitando o número de linhas retornados
Já falei sobre arrays mas relacionados com a linguagem VB .NET. O conceito em si é o mesmo mas a sintaxe em C# é diferente por isso vou começar do início para apresentar os Arrays e como usá-los na linguagem C#. |
Se você esta preenchendo uma combo, caixa de listagem ou um gride com uma grande quantidade de registros e isto está demorando muito tempo , não fique procurando otimizar sua rotina ; o problema talvez não esteja ai.
Já recebi consultas para otimizar rotinas que ao carregar um controle com 10.000/20.000 registros estavam demorando demais.
Qual a solução ?
Simples : não preencher o controle com tantos registros, i.e , limitar a quantidade de linhas retornadas do banco de dados.
A ídéia é exibir somente o que cliente precisa e quando ele precisa. É claro que a sua rotina deve estar otimizada . Para fazer isto geralmente usamos consultas SQL.
Vamos mostrar algumas formas de limitar a quantidade de registros retornados usando o SQL para uma base de dados SQL Server.
1- Usando SLECT TOP n - Para consultas simples usando SELECT podemos usar a cláusula TOP n ( n é o numero de registros a retornar) antes da instrução SELECT.
A sintaxe seria:
SELECT TOP 20 nome, endereco, email FROM tabela ORDER BY nome |
2- Usando Stored Procedures (ROWCOUNT) - Outra maneira de limitar a quantidade de linhas é usar a variável de ambiente do SQL 2000 - ROWCOUNT - e atribuir a ela a quantidade de linhas que deverá ser retornada.
CREATE PROCEDURE Contatos ( @ModuloID int, @maxrows int = 0 ) AS SET ROWCOUNT @maxrows SELECT ItemID, Data, Nome, Email, FROM Contatos WHERE ModuloID = @ModuloID |
Declarando o parâmetro @maxrows como sendo igual a zero faz com que todos os registros da seleção sejam retornados.
Outro recurso bem simples é usar uma cláusula Where e filtrar os registros selecionados usando um critério e a seguir definir a paginação dos dados.
Geralmente a instrução usa a sintaxe
básica: WHERE
[condição(ões)]
Podemos usar diversos operadores com
esta cláusula :
- AND e OR
- IN
- NOT IN
- BETWEEN
- NOT BETWEEN
Até a próxima...
Referências: