Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Desarrollo en Delphi para Android (https://www.clubdelphi.com/foros/forumdisplay.php?f=57)
-   -   Insert lento (https://www.clubdelphi.com/foros/showthread.php?t=96020)

giantonti1801 24-12-2022 16:41:33

Insert lento
 
feliz inicio de fiestas:

tengo un insert en sql server que es muy lento, quiero saber si hay alguna forma de mejorarlo y ponerlo mas rapido

Código Delphi [-]
begin
   if Label26.Text = 'InExistente' then
       begin
       UniQueryVisitantesVal.Close;
       UniQueryVisitantesVal.SQL.Clear;
       UniQueryVisitantesVal.SQL.Add('INSERT INTO visitantes (Nom_Vis,Apell_Vis,Rut_Vis,Foto,Num_dep_Vis,Edif_vis,Estatus,Usuario_mod,otro)');           //
       UniQueryVisitantesVal.SQL.Add('VALUES (:Nom_Vis, :Apell_Vis, :Rut_Vis, :Foto, :Num_dep_Vis, :Edif_vis, :Estatus, :Usuario_mod, :otro)');                      //,
       UniQueryVisitantesVal.ParamByName('Nom_vis').AsString := LabelNombreVis.text;
       UniQueryVisitantesVal.ParamByName('Rut_Vis').AsString := LabelRutVis.Text;
       UniQueryVisitantesVal.ParamByName('Foto').Assign(Image4.bitmap);
       UniQueryVisitantesVal.ParamByName('Num_dep_Vis').Asstring := LabelNumeroDpto.text;
       UniQueryVisitantesVal.ParamByName('Edif_vis').AsString := 'XXX';
       UniQueryVisitantesVal.ParamByName('Estatus').AsString := 'ACT';
       UniQueryVisitantesVal.ParamByName('Usuario_mod').Asstring := 'TOTEM';
       UniQueryVisitantesVal.ParamByName('otro').Asstring := 'E';
       UniQueryVisitantesVal.ExecSQL;
       begin
       UniQueryVisitasIngreso.Close;
       UniQueryVisitasIngreso.SQL.Clear;
       UniQueryVisitasIngreso.SQL.Add('INSERT INTO visitas (Nom_Vis,Apell_Vis,Rut__Vis,Foto,Num_dep_Vis,Piso__Vis,Edif_Vis,Hora_In_Vis, Num_Vis,Usuario_mod,otro)');           //
       UniQueryVisitasIngreso.SQL.Add('VALUES (:Nom_Vis, :Apell_Vis, :Rut__Vis, :Foto, :Num_dep_Vis, :Piso__Vis, :Edif_Vis, :Hora_In_Vis, :Num_Vis, :Usuario_mod, :otro)');                      //,
       UniQueryVisitasIngreso.ParamByName('Nom_vis').AsString := LabelNombreVis.text;
       UniQueryVisitasIngreso.ParamByName('Rut__Vis').AsString := LabelRutVis.Text;
       UniQueryVisitasIngreso.ParamByName('Foto').Assign(Image4.bitmap);
       UniQueryVisitasIngreso.ParamByName('Num_dep_Vis').Asstring := LabelNumeroDpto.text;
       UniQueryVisitasIngreso.ParamByName('Piso__Vis').AsString := 'XXX';
       UniQueryVisitasIngreso.ParamByName('Edif_Vis').AsString := 'XXX';
       UniQueryVisitasIngreso.ParamByName('Hora_In_Vis').AsDateTime := Now;
       UniQueryVisitasIngreso.ParamByName('Num_Vis').AsString := 'XXX';
       UniQueryVisitasIngreso.ParamByName('Usuario_mod').Asstring := 'TOTEM';
       UniQueryVisitasIngreso.ParamByName('otro').Asstring := 'E';
       UniQueryVisitasIngreso.ExecSQL;
       end
       end
       else
          begin
          UniQueryVisitasIngreso.Close;
          UniQueryVisitasIngreso.SQL.Clear;
          UniQueryVisitasIngreso.SQL.Add('INSERT INTO visitas (Nom_Vis,Apell_Vis,Rut__Vis,Foto,Num_dep_Vis,Piso__Vis,Edif_Vis,Hora_In_Vis, Num_Vis,Usuario_mod,otro)');           //
          UniQueryVisitasIngreso.SQL.Add('VALUES (:Nom_Vis, :Apell_Vis, :Rut__Vis, :Foto, :Num_dep_Vis, :Piso__Vis, :Edif_Vis, :Hora_In_Vis, :Num_Vis, :Usuario_mod, :otro)');                      //,
          UniQueryVisitasIngreso.ParamByName('Nom_vis').AsString := LabelNombreVis.text;
          UniQueryVisitasIngreso.ParamByName('Rut__Vis').AsString := LabelRutVis.Text;
          UniQueryVisitasIngreso.ParamByName('Foto').Assign(Image4.bitmap);
          UniQueryVisitasIngreso.ParamByName('Num_dep_Vis').Asstring := LabelNumeroDpto.text;
          UniQueryVisitasIngreso.ParamByName('Piso__Vis').AsString := 'XXX';
          UniQueryVisitasIngreso.ParamByName('Edif_Vis').AsString := 'XXX';
          UniQueryVisitasIngreso.ParamByName('Hora_In_Vis').AsDateTime := Now;
          UniQueryVisitasIngreso.ParamByName('Num_Vis').AsString := 'XXX';
          UniQueryVisitasIngreso.ParamByName('Usuario_mod').Asstring := 'TOTEM';
          UniQueryVisitasIngreso.ParamByName('otro').Asstring := 'E';
          UniQueryVisitasIngreso.ExecSQL;
          end;
end;

Casimiro Notevi 24-12-2022 17:32:06

Esos "begin" no concuerdan con esos "end";

mamcx 24-12-2022 17:40:33

Y que es "lento"?

Como puede ser lento un simple insert? Hay un trigger oculto que hace cientos por ahi?

Que te dice el query planner?

P.D: Checa http://www.clubdelphi.com/foros/showthread.php?t=93348

Neftali [Germán.Estévez] 27-12-2022 09:17:52

Estoy de acuerdo con [mamcx].
¿Qué significa lento?

Un insert por si sólo no debería ser lento y ese código difícilmente es mejorable (sólo hace un INSERT).

Neftali [Germán.Estévez] 27-12-2022 09:18:27

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 549669)
Estoy de acuerdo con [mamcx].
¿Qué significa lento?

Un insert por si sólo no debería ser lento y ese código difícilmente es mejorable (sólo hace un INSERT).

Además de lo que ya te han preguntado... ¿Hay índices? ¿Cuantos registros tiene la tabla?

giantonti1801 27-12-2022 11:07:45

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 549670)
Además de lo que ya te han preguntado... ¿Hay índices? ¿Cuantos registros tiene la tabla?

la tabla no tiene indice y tiene solo 6 registros

Neftali [Germán.Estévez] 27-12-2022 11:47:00

Cita:

Empezado por giantonti1801 (Mensaje 549674)
la tabla no tiene indice y tiene solo 6 registros

Pues con esa información no se qué quiere decir "lento", pero debería ser inmediato (salvo que haya triggers que hagan más cosas).
¿SQLServer o en Red?
Si es en red, para realizar pruebas, puedes instalar un SQLServer en local y comparar velocidades. Si hay mucha diferencia, tal vez sea achacable a problemas de red/comunicaciones (por ir descartando).


La franja horaria es GMT +2. Ahora son las 23:06:47.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi