Fórum SQL parametrizado x por string #377179

07/05/2010

0

Delphi 7 FB 1.5 IBX   Tenho em meu projeto mais de uma forma de construir consultas SQL (entenda por Selects, inserts, deletes e updates). As consultas obviamente são construídas de acordo com filtros e aí é que vem a dúvida. Ouvi dizer que o SQL constrído por parâmetro é mais rápido que o construído por string:   por Parâmetro: query.sql.add('select descricao from tabela where codigo = :CODIGO'); query.parambyname('CODIGO').asinteger := varcodigo;   por String: query.sql.add('select descricao from tabela where codigo = ' + IntToStr(varcodigo));     Essa afirmação veio da premissa que o FB prepara o SQL, e a partir da segunda execução ele não faz novamente essa tarefa, pois por parâmetros ele entende que é o mesmo SQL, e com a construção por string ele identifica que o SQL foi alterado e faz uma nova montagem para a nova execução. Como isso me pareceu lógico montei um programa especificamente para testar essa afirmação e cheguei justamente a conclusão inversa, ou seja, a construção por string foi mais rápida. Considerando que a máquina pode ter rodado algo em segundo plano durante um teste e outro, fiz mais de uma vez e em todas o resultado foi vantagem para a construção string.   Programa teste: 1. loop 9000 registros com select usando TIBQuery 2. loop 9000 registros com update usando TIBSQL   Alguém tem conhecimento mais aprofundado sobre a questão que possa ajudar a ratificar esse teste ou então propor um novo panorama de testes?   Agradeço.  
Drf

Drf

Responder

Posts

10/05/2010

Wilson Junior

No meu ponto de vista, é lógico que o por string é mais rápido, pois não precisa fazer LOOP nos parâmetros para verficar se foi alterado algum "valor" e não precisa fazer a string do SQL para substituir cada parâmetro com o seu respectivo "valor".

Espero ter colaborado.
Responder

Gostei + 0

10/05/2010

Drf

Desculpe, acho que não consegui ser claro no meu exemplo. Tenho uma consulta principal que retorna "n" registros. Para cada um desses registros preciso outra pesquisa mais detalhada, ou seja, vou usar loop em ambos os casos...e por isso estou querendo saber se compensa mais fazer essa segunda pesquisa montando o SQL a cada loop ou determinar o comando SQL com parâmetro definido e antes da abertura apenas atribuir os valores (ParamByName('parametro').As... := varparametro). Obrigado.
Responder

Gostei + 0

10/05/2010

Emerson Nascimento

não faz diferença.

se você não montar a instrução, concatenando a string, o Delphi irá montá-la "concatenando" a instrução aos parâmetros e enviará a instrução pronta para o banco de dados.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar