Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-09-2025
aposi aposi is offline
Miembro
 
Registrado: dic 2006
Posts: 159
Poder: 20
aposi Va por buen camino
Velocidad Firedac

Hola,
Tenemos un programa que hasta ahora utilizamos BDE y estamos mirando de migrar a FireDAC
Nos encontramos que las consultas a base de datos es mucho mas lentas.
que creado un programa de test con componentes Firedac y Interbase y la velocidad es muy diferente.


que creado dos conexiones, una con firedac y una con IBdatabase, un query para cada uno y un grid para cada consulta


en Firedac tarda 2351 ms
en IB tarda 182ms


Hay algun parametro para mejorar la velocidad?

Código Delphi [-]
type
  TForm7 = class(TForm)
    FDConnection1: TFDConnection;
    FDQuery1: TFDQuery;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Button1: TButton;
    LabeledEdit1: TLabeledEdit;
    IBDatabase1: TIBDatabase;
    IBQuery1: TIBQuery;
    DataSource3: TDataSource;
    DBGrid3: TDBGrid;
    Button3: TButton;
    LabeledEdit3: TLabeledEdit;
    procedure Button1Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form7: TForm7;

implementation

{$R *.dfm}

procedure TForm7.Button1Click(Sender: TObject);
var
  tInicio, tFin: TDateTime;
  ms: Int64;
begin
  FDQuery1.close;
  tInicio := Now;
  FDQuery1.Open();
  tFin := Now;
  ms := MilliSecondsBetween(tFin, tInicio);
  LabeledEdit1.Text := ms.ToString;
end;



procedure TForm7.Button3Click(Sender: TObject);
var
  tInicio, tFin: TDateTime;
  ms: Int64;
begin
  IBquery1.Close;
  tInicio := Now;
  IBquery1.Open();
  tFin := Now;
  ms := MilliSecondsBetween(tFin, tInicio);
  LabeledEdit3.Text := ms.ToString;
end;

end.
Responder Con Cita
  #2  
Antiguo 09-09-2025
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.435
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Muy raro porque la velocidad de ejecución debería ser justo al contrario.
La más lenta el BDE, luego IBExpress y lo más rápidos FireDAC.

En todo caso, habría que hacer una prueba con Interbase (para probar temas de compatibilidad).
Y revisar los temas de configuración.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 09-09-2025
marco3k marco3k is offline
Miembro
 
Registrado: feb 2015
Posts: 106
Poder: 12
marco3k Va por buen camino
Habrá que ver como esta estructurado tu consulta y si las tablas tienen los indices necesarios. En bde trabaja con tablas planas y muchas veces se usa el objeto Table trayendo todos los registro, en modo local quizás no se note la diferencia pero en gestores de base de datos como Firebird y demás, no se procede de esa manera (traer todos los registros y luego buscar el que necesites), se debe buscar por un filtro(este filtro debe tener un indice de búsqueda) en la consulta SQL y traer el registro que necesitas.
Responder Con Cita
  #4  
Antiguo 09-09-2025
aposi aposi is offline
Miembro
 
Registrado: dic 2006
Posts: 159
Poder: 20
aposi Va por buen camino
la consulta el es un simple :
Código SQL [-]
Select * from cliente


En la tabla hay 600 clientes
Responder Con Cita
  #5  
Antiguo 09-09-2025
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Si vas a trabajar con firebird entonces IBX, es lo más rápido y totalmente enfocado a interbase/firebird.
Si vas a usar distintas entonces FireDac.
Responder Con Cita
  #6  
Antiguo 09-09-2025
aposi aposi is offline
Miembro
 
Registrado: dic 2006
Posts: 159
Poder: 20
aposi Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Si vas a trabajar con firebird entonces IBX, es lo más rápido y totalmente enfocado a interbase/firebird.
Si vas a usar distintas entonces FireDac.


la intencion es trabajar con distintas bases de datos, pero el problema es la velocidada en Firedac
Responder Con Cita
  #7  
Antiguo 09-09-2025
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
No creo que sea un problema eso.
Responder Con Cita
  #8  
Antiguo 10-09-2025
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.435
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por aposi Ver Mensaje
la intencion es trabajar con distintas bases de datos, pero el problema es la velocidada en Firedac
Por lo que yo se, tanto IBExpress como FireDAC acaban conectándose a las Bases de Datos (IB/FB) utilizando la misma librería cliente (gds32.dll, fbclient.dll).
No se cual estás utilizando tú.

Por eso es extraño que exista mucha diferencia de velocidad.
Tal vez deberías revisar la configuración de FireDAC. Importante los Tipos de cursores que estás utilizando (cliente/servidor).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 12-09-2025
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 360
Poder: 3
navbuoy Va por buen camino
No te recomiendo cargar un TTable en la app, si tiene demasiados datos sobrecargara el sistema, yo cuando trabajo con cosas asi lo que hago es un TQuery y ejecuto la consulta SQL que trae solo los resultados del Engine de BD, ademas yo utilizo MyDAC MySQL componentes que van bastante rapido
Responder Con Cita
  #10  
Antiguo 15-09-2025
aposi aposi is offline
Miembro
 
Registrado: dic 2006
Posts: 159
Poder: 20
aposi Va por buen camino
Hola,
investigando he visto que són los campos BLOB los que hacen relentizar la consulta...
Otra cosa muy curiosa es que si el programa lo ejecuto en el servidor donde esta la base de datos, el tiempo de respuesta entre Firedac y los componentes Interbase son iguales (con los campos BLOB incluidos en la consulta) , pero si ejecuto la consulta desde otro pc de la red es cuando se demora
Responder Con Cita
  #11  
Antiguo 15-09-2025
marco3k marco3k is offline
Miembro
 
Registrado: feb 2015
Posts: 106
Poder: 12
marco3k Va por buen camino
Cita:
investigando he visto que són los campos BLOB los que hacen relentizar la consulta...
Claro, cuando de trata en red se debe evitar este tipo de consultas "Select * from cliente" (salvo excepciones), como pusiste en tu consulta inicial, se debe colocar los campos que necesitas, por ejemplo "select nro_doc, nombre, apellido, razon_social, direccion from cliente", de esta manera es mas eficiente. Y como aclaraste que tienes un campo blob ese es un campo innecesario para un listado ABM, porque por ejemplo podrías tener en el campo blob la foto para imprimir una credencial y eso lo podrías consultar individualmente y no traer todas las fotos a la vez.

Cita:
Otra cosa muy curiosa es que si el programa lo ejecuto en el servidor donde esta la base de datos, el tiempo de respuesta entre Firedac y los componentes Interbase son iguales (con los campos BLOB incluidos en la consulta) , pero si ejecuto la consulta desde otro pc de la red es cuando se demora
En el servidor siempre se ejecutara mas rápido porque los datos están localmente, al ejecutarlo en red si el campo blob tiene datos se ejecutara lento la consulta, por eso la necesidad de traer los campos necesarios.

Por eso se debe especificar bien los datos de tu pregunta inicial. Si mencionabas inicialmente que tenias campos blob, tu duda ya se habría resuelto antes.

Última edición por marco3k fecha: 15-09-2025 a las 18:53:10.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Velocidad Firedac Vs ADO oscarac Varios 3 10-05-2019 18:14:52
Dif en velocidad dao_ar Firebird e Interbase 2 23-11-2009 17:06:05
Velocidad Interbase fjardelphi Firebird e Interbase 5 01-02-2005 09:45:04
Velocidad en red Jordy Varios 2 11-01-2005 09:54:58


La franja horaria es GMT +2. Ahora son las 06:48:08.


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