Otimizando o desempenho de suas consultas (Cache)

por Fernando D'Angelo 3. maio 2000 00:00
MaxRecords é mais uma das propriedades do objeto RecordSet que muitas vezes os programadores deixam de utilizar , às vezes por falta de hábito, outras vezes porque não sabem como ela pode simplificar a construção de um código e até mesmo otimizar uma consulta.

Esta propriedade limita a quantidade de registros que será retornada ao Recordset quando uma consulta é feita. Assim, se uma tabela de um determinado banco de dados tiver 2.000 registros e a propriedade MaxRecords estiver setada com o valor 10, então só os dez primeiros registros serão retornados, e o restante será ignorado.

Atenção: apesar de lembrar a propriedade CacheSize ( veja Tutorial ASPBrasil ) , a propriedade MaxRecords se comporta como uma espécie de "filtro" que retorna apenas os n primeiro registros da tabela, mesmo que existam outros registros que satisfaçam o critério da consulta feita. Já a propriedade CacheSize não limita o número de registros retornados; ela especifica a quantidade de registros que serão retornados a cada acesso à base de dados.

Para reforçar o entendimento desta propriedade, vamos analisar um exemplo prático.

Imagine que você está fazendo um site para uma empresa de turismo, e sua tarefa é mostrar ao internauta quais são os 10 hotéis mais caros que estão cadastrados.

Intuitivamente, pensamos em ordenar os hotéis em ordem descendente de diária ( iniciando do mais caro até chegar no mais barato ), e depois criar um laço com um contador que é incrementado a cada leitura de um novo registro e, quando o contador atingir o valor 10, quebramos o laço como no código abaixo:

<%
connstring = "dsn=banco;uid=usuario;pwd=senha"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open connstring
sql = "select * from hoteis order by diaria desc"
Set rstTemp = Conn.Execute(sql)
contador = 1
Do while not rstTemp.Eof
If contador = 10 then Exit
Response.Write(rstTemp("Hotel") & " - " & rstTemp("Diaria"))
contador = contador + 1
rstTemp.MoveNext
Loop
%>

Este código funciona, mas poderíamos melhorá-lo com o uso da propriedade MaxRecords. Basta setá-la com o valor 10 antes de abrir o recordset e descartar o contador, já que apenas dez registros serão retornados!

<%
connstring = "dsn=banco;uid=usuario;pwd=senha"
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open connString
sql = "select * from hoteis order by diaria desc"
Set rstTemp = Server.CreateObject("ADODB.RecordSet")
rstTemp.MaxRecords = 10
rstTemp.Open sql, connstring
Do while not rstTemp.Eof
Response.Write(rstTemp("Hotel") & " - " & rstTemp("Diaria"))
rstTemp.MoveNext
Loop
%>

Mas se você não se importa em criar um contador e acha que não há muita diferença entre o primeiro e o segundo código, há uma grande razão para aderir ao uso da propriedade MaxRecords: ela poupa recursos de sistema, uma vez que serão retornados ao RecordSet somente 10 registros ao invés de todos os registros da tabela.

Observações:

1 ) Esta propriedade é somente-leitura enquanto o RecordSet estiver aberto.

2 ) Para desativar a propriedade MaxRecords, ou seja, para definir que todos os registros deverão ser retornados, basta setar o seu valor para zero.

Tags:

Posts Antigos




Comentários

Comentar




  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading




Calendário

<<  fevereiro 2012  >>
seteququsedo
303112345
6789101112
13141516171819
20212223242526
2728291234
567891011

Ver os posts em um calendário maior

Oportunidades


Para divulgar oportunidades aqui, entre em contato conosco enviando a descrição completa da vaga + uma data de validade para cada uma delas.

* As vagas divulgadas neste espaço são de inteira responsabilidade das empresas anunciantes.

Assine Nossa Newsletter

Quero ser notificado quando um novo Post for publicado