|
Erasmo,
Hj utilizamos o
SqlBase 7.5.1, PostGreSQL 8 beta 5, Oracle 8.1.7, e CTD 2000 como
ferramenta de desenvolvimento.
Com o Oracle, e SqlBase existe uma diferen�a no tempo de
resposta para menor, qdo n�o se utiliza vari�veis BIND, e para
o PostgreSql como n�o tem conex�o nativa � ODBC, melhora e muito, qdo n�o
se utiliza var�veis BIND.
Mas a n�o utiliza��o
de vari�veis BIND foi sugerida, h� algum tempo por funcion�rios da
empresa que fornece o SqlWindows/CTD e s�o desenvolvedores tamb�m, pois foram
feitos testes, e o tempo de resposta para comandos que n�o utilizavam
vari�veis BIND � menor.
Agrade�o as dicas,
farei mais alguns testes.
Abra�os,
Haroldo.
Haroldo,
Me desculpe, n�o sei se o que voc�
comentou � verdade para o SQLBase (acho que � esse SGBD que vc est�
utilizando), mas eu posso lhe garantir com toda certeza que para Oracle �
"p�ssimo" fixar valores nos selects, com certeza a performance � muito melhor
utilizando vari�veis bind, principalmente se o processo for repetitivo. Pode
perguntar a qualquer DBA.
Todo comando a ser executado passa por pelo
menos duas fases, a Compila��o e a Execu��o (no select existe a terceira fase,
a Busca), em qualquer SGBD inteligente, os comandos mais utilizados ficam
armazenados pr�-compilados, ou seja, para estes comandos o SGBD sempre pular�
a fase de compila��o ganhando um tempo enorme no geral, mas isso s� � poss�vel
se for utilizado vari�veis bind, pois com valores fixos anexados aos comandos,
cada um deles ser� diferente do outro, ou seja, o SGBD ser� obrigado a
compilar todo comando novamente. Pode-se n�o perceber isso rodando uma
transa��o simples, mas quando se faz transa��es enormes faz muita diferen�a,
pra voc� ter uma id�ia, uma vez um cliente reclamou de um processamento de
fechamento que estava demorando cerca de 12 horas, fomos fazer um trace da
sess�o do processamento e descobrimos que o desenvolvedor criou dentro de um
processamento recursivo um comando select onde fixava os valores no meio do
comando, modificamos o comando utilizando BIND e o mesmo processamento caiu
para 2,5 horas.
Enfim, como eu disse, eu n�o sei como o seu SGBD se
comporta, mas se fosse Oracle com certeza sua afirma��o estaria completamente
equivocada.
Sds, Erasmo
--
|
|
Erasmo Bispo de
Oliveira Junior Gerente de Pesquisa e Desenvolvimento
| Haroldo
wrote:
Pessoal, Eu tenho comandos SQL que
utilizam vari�veis BIND, e gostaria de efetuar umas modifica��es, como nos
exemplos que seguem, pelo motivo de melhorar a velocidade do comando, pq j�
foi provado que � bem mais r�pido n�o utilizar vari�veis bind nas condi��es
de WHERE, o problema � que s�o v�rios comandos, e seria trabalhoso no
momento modific�-los.
Vari�veis:
Number: nCDPESSOA
String: sNMPESSOA
1)
"SELECT CDPESSOA, NMPESSOA
INTO :nCDPESSOA, :sNMPESSOA
FROM PESSOA WHERE CDPESSOA = :dfCDPESSOA AND
DTINCLUSAO = :dfDTINCLUSAO"
2)
"SELECT CDPESSOA, NMPESSOA
INTO :nCDPESSOA, :sNMPESSOA
FROM PESSOA WHERE CDPESSOA = "||
SalNumberToStrX( dfCDPESSOA,0) || "
AND @DATETOCHAR( DTINCLUSAO,
'DD.MM.YYYY' = '" || SalFmtFormatDateTime ( dfDTINCLUSAO, 'DD.MM.YYYY')
||"'"
Algu�m poderia me dar uma dica, na
qual eu criaria uma rotina para compilar os
comando/STRING antes de mandar fazer o SqlPrepare e SqlExecute, tipo
deixando o comando assim, sem a necessidade
de editar todos os comandos:
"SELECT CDPESSOA, NMPESSOA
INTO :nCDPESSOA, :sNMPESSOA
FROM PESSOA WHERE CDPESSOA = 1234 AND
DTINCLUSAO = '30.11.2004' "
Agrade�o desde j� qquer dica,
Haroldo.
|