COMPARANDO PERFORMANCE CONSULTA SQL
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
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
Rodrigo...
posso te mandar, se vc quizer, um código que acesse meu servidor que está em Garopaba-SC para vc testar...
posso te mandar, se vc quizer, um código que acesse meu servidor que está em Garopaba-SC para vc testar...
por favor Jean, ficarei grato.
rodrigomarchese@msn.com
rodrigomarchese@msn.com
estarei enviando em seguida...
enviado...
O Problema é que vc não pode usar por exemplo o rs.recordcount, rs.movelast, rs.absoluteposition, etc... quando utiliza o cnn.execute
O Problema é que vc não pode usar por exemplo o rs.recordcount, rs.movelast, rs.absoluteposition, etc... quando utiliza o cnn.execute
Poooorrrrrra Jeaan..ce trampa em GAROPABA ?....meu..ce é privilegiado ao extremo KAKAKAKAK....é simplesmente maravilhoso lá...tem vaga pra assistente de assuntos aleatórios ? hehehee
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).
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).
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
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
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.
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.
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...
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...
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
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
Tópico encerrado , respostas não são mais permitidas