Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

webfuture

Demora em fazer um count(*)

Recommended Posts

Galera, estou com um grande problema, tenho um sistema de paginação que trabalha super rapido com uma base de dados de 500.000 registros, ele traz os resultados em torno de 1 ou 2 segundos no máximo, porém quando vou efetuar uma contagem de registros para saber o total de registros encontrados ele me aumenta o tempo para 8 segundos e por ai vai de acordo com a palavra, efetuando alguns testes, gostaria de saber como posso fazer um count(*) para pegar o total de registros encontrados neste script abaixo, tentei de alumas formas mas não consegui....

 

varbusca = request("varbusca")arr= split(varbusca,",")for x = 0 to ubound(arr)if x =0 thenvarsql = " (campo1) like '%" & (arr(x)) & "%' or (campo2) like '%" & (arr(x)) & "%' or (campo3) like '%" & (arr(x)) & "%' "elsevarsql = varsql & "or (campo1) like '%" & (arr(x)) & "%' or (campo2) like '%" & (arr(x)) & "%' or (campo3) like '%" & (arr(x)) & "%'  "end ifnextSet RS = Server.CreateObject("AdoDB.Recordset")RS.open "Select top 20 campo1, campo2, campo3 From Tabela WHERE ("& varsql &") ", conexaoSQL, 3total = RS.RecordCountDo while not RS.EOFcampo1 = RS.Fields("campo1")campo2 = RS.Fields("campo2")campo3 = RS.Fields("campo3")campo4 = Rs.Fields("campo4")Response.Write title & "<BR>" & campo1 & "<BR>" & campo2 & "<BR><BR>"RS.movenextLoopRS.closeset RS = nothing

Se coloco o Rs.RecordCount ele retorna 20, que é o valor estipulado no select, mas sei que tem como ser feito para ele puxar o valor encontrado mas não estou conseguindo achar onde estou errando...

 

Se alguém puder ajudar,

 

WEbFuture

Compartilhar este post


Link para o post
Compartilhar em outros sites

ja tentou fazer um contadorzinho em vb mesmo??

Ja tentou fazer um contadorzinho em VB mesmo?[code]Counter = 0Do while not RS.EOFcampo1 = RS.Fields("campo1")campo2 = RS.Fields("campo2")campo3 = RS.Fields("campo3")campo4 = Rs.Fields("campo4")Response.Write title & "<BR>" & campo1 & "<BR>" & campo2 & "<BR><BR>"RS.movenextCounter = Counter + 1LoopResponse.Write(Counter)
nao sei se vai servir ai...mais eu uso assim diretop e sempre funciona!

essa hora tbm e osso...kkk

q q coisa post ae!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Rodrigo, eu consegui resolver aqui, tirando o top do select porém ele demora muito fazendo a busca nos 3 campos usando like, estou tentando achar uma forma de fazer abusca tipo top 20 mas pegar o total de resultados de acordo com a pesquisa, pois com o count ele demora cerca de 5 segundos para trazer os resultados.Esta dica que voce falou não conta somente o total de registros listados na página ?WebFuture

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sera que existe alguma forma de contar o total de registros encontrados e não demorar tanto tempo ? Porque com o Count a contagem leva em torno de 7segundos, sei la com alguma outra linguagem, algum outro banco, alguém saberia me dizer?WebFuture

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim, por exemplo:select count(equ_int_codigo) from tbl_equipamento

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá birobirosk8, desta forma ele também demora, to fazendo uma porrada de teste aqui mas nada ta ficando rapido, fico imaginando como alguns sistemas com milhões de registros trabalham tão rapido, sendo que o negócio ja esta impacando no count... ou impaca no count.WebFuture

Compartilhar este post


Link para o post
Compartilhar em outros sites

po legal... o sql server eh um banco fantástico..procura na internet, um esquema sobre dar select numa tabela do banco MASTER pra obter o numero de registros...tipo q tem uma tabela no MASTER que tem o nro de registros de cada tabela do bd... ai você so da um select em 1 campo e já era... eh mto rápido.Abrazzz

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas resolveria no meu caso? Tipo preciso total de registros de acordo com a busca filtrando com like por 3 campos para efetuar apaginação...WebFuture

Compartilhar este post


Link para o post
Compartilhar em outros sites

ah eh vdade....

 

ai acho q naum...

 

 

engraçado, deve ter uma solucao pra isso, pq o COUNT de fato eh demorado demasiado... imagina pra fzr relatorios em tabelas de milhoes de registros... sera q eles usam isso tb?

 

webfuture, faz ele compilado no banco, com uma stored procedure, acho q nao vai adiantar quase nada, mas qqr ganho eh lucro.

 

olha o jeito anterior q t falei...

 

http://support.microsoft.com/kb/176426/pt

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Fernando_Bittencourt, foi o que imaginei, tentei deixar ele na stored também, porém da na mesma ele demora bastante, poxa, o que sera que estes caras fazem para uma consulta ser tão rapida ? WebFuture

Compartilhar este post


Link para o post
Compartilhar em outros sites

tava vendo aki na net... tem um recurso q acho q você pode explorar

 

http://www.devmedia.com.br/articles/viewcomp.asp?comp=5107

 

nesse artigo fala da instrucao OVER e parece q so tem no sql 2005 e no Oracle

 

tb li em outros fóruns que tem selects desse tipo q demoram 20 minutos...

 

posta a instrucao select sua ae,

ou me add no messenger , tenho essa duvida a moh kra

 

aaronmorlocks@hotmail.com

 

falowz

Compartilhar este post


Link para o post
Compartilhar em outros sites
Olá Fernando_Bittencourt, foi o que imaginei, tentei deixar ele na stored também, porém da na mesma ele demora bastante, poxa, o que sera que estes caras fazem para uma consulta ser tão rapida ?

 

WebFuture

Pergunto,

Esse teste com a SP é feito localmente? O SQLServer está instalado em uma máquina dedicada a ele ou não?

 

Se for local a demora pode ser ocasionada pelo seu sistema, que tem que dividir o processamento para o SQLServer, para o servidor IIS, e para qualquer outras coisas que estejam alocadas.

 

Outra coisa, o SELECT retornando os dados é mais rápido? Pode usar RS.count nesses casos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Te adicionei no meu MSN para conversarmos, achei bem legal o link que voce passou, estou dando uma estudada nele, mas em primeiro teste, não sei se foi a maquina aqui deu uma travada, vou continuar mexendo...WebFuture

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Salgado, o teste com a SP é feito no servidor web mesmo, esta em uma maquina semi-dedicada.No script de paginação normal esta sendo mais rapido sim, sem stored uso o RS.RecordCount ele traz normal, porém o tempo esta um pouco alto, mas menos que na SP.WebFuture

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Fernando, me tira uma dúvida, você comentou que existe uma forma de fazer paginação sem fazer o count ou usar RecordCount para saber o total de registros encontrados atraves de uma pesquisa, minha dúvida é, esta paginação não ficaria com falhas? Funciona perfeito ?Digo, como o sistema saberia se encontrou 20 ou 1000 registros ?WebFuture

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.