Boa tarde pessoal!
Estou tentando entender a diferença de performance em duas implementações que
fazem a mesma coisa, mas ainda não consegui achar uma explicação.
Segue abaixo os dois exemplos, caso alguém possa me ajudar no entendimento:
Tenho um arquivo texto de 12 mil linhas, parte do conteudo abaixo:
SELECT aux_ir_gao_generico ('I', 39700, '1621', '39700', 0);SELECT
aux_ir_gao_generico ('I', 39700, '1622', '39700', 0);. . .SELECT
aux_ir_gao_generico ('I', 39700, '1623', '39700', 0);SELECT aux_ir_gao_generico
('I', 39700, '1624', '39700', 0);
******* Fiz um programa C++ que simplesmente lê o arquivo e executa cada uma de
suas linhas, a seguir:
main(){
time_t now; char l_comando_sql[C_TAM_MAX_LINHA+1]; int resultado_st; FILE*
a_arq_executado;
PGconn *l_conexao = PQconnectdb(dbname=bd_vas user=vas_user); PGresult
*l_result;
now = time(0); std::cout << "tempo inicial=" << now << std::endl;
a_arq_executado = fopen (C_NOME_ARQ_EXECUTADO, "r"); fseek (a_arq_executado,
0, SEEK_SET);
for(int cont_linha = 1; (fgets(l_comando_sql, sizeof(l_comando_sql),
a_arq_executado) != NULL); cont_linha++){ l_result = PQexec(l_conexao,
l_comando_sql); -- comentando esta linha, fica instantaneo (nao é problema ao
ler o arquivo) }
now = time(0); std::cout << "tempo final=" << now << std::endl; }
******* No outro teste, fiz uma funcao postgres e 'embuti' as mesmas queries, a
seguir:
CREATE FUNCTION insere_gao_mult () RETURNS INTEGER AS'DECLARE l_retorno
INT;BEGIN
SELECT into l_retorno aux_ir_gao_generico (''I'', 39700, ''1621'', ''39700'',
0);SELECT into l_retorno aux_ir_gao_generico (''I'', 39700, ''1622'',
''39700'', 0);-- omitindo as outras linhas, só 12 mil dentro de uma funcao...
rsSELECT into l_retorno aux_ir_gao_generico (''I'', 39700, ''1623'', ''39700'',
0);SELECT into l_retorno aux_ir_gao_generico (''I'', 39700, ''1624'',
''39700'', 0);
RETURN 0;
END;' LANGUAGE 'plpgsql';
Rodei um script .sh para chamar a funcao acima.
Tempo do programa C++..................................: 1 minutoTempo
executando a funcao q contem as linhas do arquivo: 3 segundos
Particularmente, acho muito interessante este tipo de dúvida, e por isso
resolvi postar aqui....
Pq toda essa diferença no tempo?!?!?! (desculpem a ignorância)
obs: não vou ter funções como a do meu exemplo, é apenas para tentar entender
alguns conceitos.
Grato,Fabio Barros _______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral