COMPARANDO PERFORMANCE CONSULTA SQL

RODRIGOMARCHESE 11/07/2005 18:01:22
#93482
Boa tarde pessoal,

O que vocês acham em termos velocidade de resposta do BD para carregar os recordset

'usando o método execute da conexão para carregar o recordset
Set RSteste = ConexaoBD.Execute("SELECT * FROM PESSOAS WHERE PESSOAID = 300")

ou

RSteste.Open "Select * From Pessoas Where PessoaID = 300", ConexaoBD

é claro que se eu fizer na minha máquina local, não teria muito que comparar, mas digamos que a base de dados esteja em CURITIBA e o cliente lá em RORAIMA.
Considerando uma banco SQL Server 2000
JEAN.JEDSON 11/07/2005 18:04:06
#93484
Rodrigo...
posso te mandar, se vc quizer, um código que acesse meu servidor que está em Garopaba-SC para vc testar...
RODRIGOMARCHESE 11/07/2005 18:07:17
#93486
por favor Jean, ficarei grato.

rodrigomarchese@msn.com
JEAN.JEDSON 11/07/2005 18:12:40
#93488
estarei enviando em seguida...
JEAN.JEDSON 11/07/2005 18:26:59
#93493
enviado...

O Problema é que vc não pode usar por exemplo o rs.recordcount, rs.movelast, rs.absoluteposition, etc... quando utiliza o cnn.execute
USUARIO.EXCLUIDOS 11/07/2005 18:33:29
#93496
Poooorrrrrra Jeaan..ce trampa em GAROPABA ?....meu..ce é privilegiado ao extremo KAKAKAKAK....é simplesmente maravilhoso lá...tem vaga pra assistente de assuntos aleatórios ? hehehee
USUARIO.EXCLUIDOS 11/07/2005 18:33:58
#93497
Do ponto de vista do SGBD um comando SQL é dividido em três fases: Parse, Execute e Fetch (fetch é usado somente no SELECT).

Dependendo do comando o SGBD gasta mais tempo na fase de parse que nas fases de execute e fetch, tudo isto graças ao * (asterisco) no SELECT que é divulgado de forma errada em qualquer material sobre banco de dados, ou seja, sempre coloque a lista de campos necessários, se for selecionar todos os campos coloqu-os um a um ao invés de usar * (asterisco).
JEAN.JEDSON 12/07/2005 07:51:51
#93545
Bem... vamos por partes, como diria Jack, o estripador...

RODRIGOMARCHESE
rodou o programa? funcionou? quais foram os tempos de resposta?

LAERTE
é realmente um privilégio trabalhar em garopaba, ainda mais na MORMAII. Infelizmente só tenho vagas para mulheres gostosas e disponíveis para pagamento em horas de amor (se minha mulher escuta eu viro eunuco eh eh eh)

JOSE.NIZ
Concordo com vc em relação a colocar todos os campos na declaração do select, mas convenhamos... se vc tem uma tabela com 30 ou 40 campos (isso quando não resolve aparecer nosso amigo JOIN), teremos uma tarefinha meio chata... particularmente utilizo sempre o asterístico, menos quando utilizo JOIN
RODRIGOMARCHESE 12/07/2005 09:44:27
#93572
JEAN

Ogrigado, recebi e testei seu arquivo.exe

O resultado do teste foi:
rs.Open ley 6351 registros numa média de 37 segundos (considerando vários testes)

Con.Execute leu 1 registro variando entre 1 e 3 segundos

Gostaria também de testar 1 registro com o rs.Open

Para voce ter uma idéia de distà¢ncia estou a 180 km de Foz do Iguaçu, na divisa com o Paraguai.
JEAN.JEDSON 12/07/2005 09:49:30
#93575
RODRIGO...

na verdade o cnn.execute leu os mesmos 6.351 registros, mas como disse, ele retorna -1 para rs.recordcount, por isso vc achou que ele leu apenas 1 registro...

o que estive pensando é que o teste não está correto, uma vez que abri a conexão, li com open, fechei, li com execute. ou seja, a conexão estava aberta, então o maldito sql deve ter feito um cache... irei fazer dois executáveis separados, para ter uma base melhor, e te envio assim que estiver pronto...
RODRIGOMARCHESE 12/07/2005 09:49:43
#93576
Outra coisa,

quanto você citou que:
"O Problema é que vc não pode usar por exemplo o rs.recordcount, rs.movelast, rs.absoluteposition, etc... quando utiliza o cnn.execute"

consegui utilizar estes recursos quando fiz assim:

Set rs = Con.Execute("Select PessoaID From Pessoas")
for i = 1 to rs.recordcount
debug.print rs.fieds("PessoaID").value
rs.movenext
next i

Página 1 de 3 [21 registro(s)]
Tópico encerrado , respostas não são mais permitidas