Ver Mensaje Individual
  #7  
Antiguo 15-07-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola movorack.
Cita:
Empezado por movorack Ver Mensaje
Tengo una pequeña duda con respecto a la eficiencia de ejecución de las consultas paramétricas vs consultas estáticas.
Lo dicho por Casimiro y duilioisola, usar parámetros es superior en todos los aspectos.

Cita:
Empezado por movorack Ver Mensaje
Si! eso es lo que siempre he manejado pero tengo un compañero algo terco que y no he hallado la respuesta técnica para terminar de convencerlo.
Para muestra basta un botón... Que pruebe este ejemplo con solo dos columnas:
Código Delphi [-]
const
  NO_ROWS = 100000;
var
  Freq, Start, Stop: Int64;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Font.Name:= 'Currier';
  QueryPerformanceFrequency(Freq);
end;

procedure TForm1.btnStaticClick(Sender: TObject);
var
  i: Integer;
  tt: Double;
begin
  with IBQuery1 do
  begin
    Close;
    SQL.Text:= 'DELETE FROM TEST';
    ExecSQL;
    QueryPerformanceCounter(Start);
    Close;
    for i:= 1 to NO_ROWS do
    begin
      SQL.Clear;
      SQL.Add('INSERT INTO TEST(ID,NOMBRE)');
      SQL.Add('VALUES('+QuotedStr(IntToStr(i))+', '+
        QuotedStr('Nombre '+IntToStr(i))+')');
    end; 
    ExecSQL;
  end;
  QueryPerformanceCounter(Stop);
  tt:= (Stop-Start)*1000000 div Freq;
  Memo1.Lines.Add(Format('Estatico            : %s ms.',[FormatFloat('0,', tt)]));
end;

procedure TForm1.ParameterClick(Sender: TObject);
var
  i: Integer;
  tt: Double;
begin
  with IBQuery1 do
  begin
    Close;
    SQL.Text:= 'DELETE FROM TEST';
    ExecSQL;
    QueryPerformanceCounter(Start);
    Close;
    SQL.Clear;
    SQL.Add('INSERT INTO TEST(ID,NOMBRE)');
    SQL.Add('VALUES(:ID,:NOMBRE)');
    Prepare;
    for i:= 1 to NO_ROWS do
    begin
      ParamByName('ID').AsInteger:= i;
      ParamByName('NOMBRE').AsString:= Format('Nombre %d',[i]);
    end; 
    ExecSQL;
  end;
  QueryPerformanceCounter(Stop);
  tt:= (Stop-Start)*1000000 div Freq;
  Memo1.Lines.Add(Format('Parametrizado: %s ms.',[FormatFloat('0,', tt)]));
end;
En mi caso obtuve estos resultados:
Código:
Estatico     : 665.696 ms.
Parametrizado: 135.562 ms.
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 15-07-2014 a las 01:37:34.
Responder Con Cita