Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-05-2008
marilinspi marilinspi is offline
Miembro
 
Registrado: ene 2007
Posts: 136
Poder: 18
marilinspi Va por buen camino
Firebird mas lento que Paradox... por qué?

hola a todos, les cuento estoy pasando un sistema de Gestion comercial de Padadox a Firebird en delphi 7 porque se dice que Firebird es mucho mas rapido que paradox, pero resulta que he probado a ambos gestores con una tabla de 13000 registros y Paradox accede, inserta, modifica, etc. mas rapido que firebird, en que me estare equibocando o que me faltaria hacer? de las dos formas que probe las bases de datos estan en servidores remotos y los componentes que uso para conectarme a firebird son SqlDset, DSetProvider, ClientDataSet y DataSource. Cualquier duda preguntenme y espero su ayuda. Desde ya muchas gracias
Responder Con Cita
  #2  
Antiguo 07-05-2008
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Firebird o Interbase están diseñados para trabajar con esquemas cliente servidor, mientras que con Paradox esta muy optimizado para trabajar en una estación, de tal forma al hacer un query como el siguiente:

Código SQL [-]
select * from tabla where id = 1

Va a ser más rapido en Firebird que en Paradox, ya que el segundo traerá toda la información hasta tu aplicación y filtrará al final mientras Firebird hace el filtro directamente en el servidor y a la hora de trabajar al hacer un insert o un update será mejor con esta forma de trabajo... pero si la consulta es la siguiente:


Código SQL [-]
select * from tabla

Paradox posiblemente lo haga más rápido que Firebird... ya que la idea de Firebird es de traer información altamente optimizada, mientras la opción paradox es tener todo en memoria...
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #3  
Antiguo 08-05-2008
marilinspi marilinspi is offline
Miembro
 
Registrado: ene 2007
Posts: 136
Poder: 18
marilinspi Va por buen camino
Entiendo lo que dice Ronpablo, pero en cualquier sistema va haber consultas como estas: 'Select * from tabla' tanto en Paradox como en Firebird, son indispensables, entonces la pregunta es como hacer en Firebird para que sea mas rápido, abra alguna propiedad, algún componente o alguna forma de escribir el código, no se si alguien me puede ayudar, desde ya muchas gracias
Responder Con Cita
  #4  
Antiguo 08-05-2008
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
La idea es la siguiente, si tu estas trabajando con información realmente necesitas "pocos datos", si quiere sacar un reporte de personas que han pagado entre el 1 de enero del 2008 hasta el día de hoy es ineficiente traer ademas todos los pagos realizados antes del primero de enero, lo mismo si tu quieres ingresar, cambiar o borrar los pagos de Pedro Perez, para que vas a tener en memoria los pagos de mil u once mil personas más que no estas usando en el momento, es ahí a la hora de hacer esos filtros donde Firebird es un monstruo que se come en velocidad a Paradox por lo que te explique anteriormente... Entonces para trabajar yo normalmente uso los componentes IBX, de forma tal que a la hora de consultar los pagos entre fechas hago algo así como el siguiente Query el cual pongo dentro de la propiedad SQL de un componente de tipo IBQuery:

Código SQL [-]
select * from pagos where fecha betwwen :f1 and :f2


Ahora cuando quiero realizar, modificar o borrar pagos trabajo con el componente IBDataSet en la propiedad SelectSQL pongo:

Código SQL [-]
Select * from pagos where id = :unParametro

luego en el componente visual le hago clic derecho al componente IBDataSet y selecciono DataSet Editor y genero los otros códigos de forma automática y así trabajo muy rápido
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #5  
Antiguo 08-05-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
La forma de agilizar las consultas en Firebird es bien fácil:
- definir clave primaria en todas las tablas
- definir índices sobre los campos de búsquedas más usuales, en forma ascendente o descendente, según se use en las búsquedas. Si es un campo que se repite mucho el mismo valor, no será candidato a ser un índice.
- Ya en modo avanzado, ver el plan de ejecución de la consulta SQL y asignar tú mismo el plan.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 08-05-2008
marilinspi marilinspi is offline
Miembro
 
Registrado: ene 2007
Posts: 136
Poder: 18
marilinspi Va por buen camino
hola, Lepe... segui todos tus consejos y la velocidad aumento un 25%, te cuento lo que tengo que hacer es simple, al abrir el formulario Articulos y a travez de esta consulta

Select *
From Articulos
Order by Nombre_ART

traer todos los articulos. Ya le cree el indice al Nombre_ART y la clave primaria a Numero_ART, pero aunque la velocidad haya aumentado sigue siendo lento, no se si tenes algun consejo para darme para esta consulta especifica. Desde ya muchas gracias
Responder Con Cita
  #7  
Antiguo 08-05-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Si es un Select *, lo único que puedes hacer es:
Código SQL [-]
select FIRST 100 * 
from articulos
Order by Nombre_ART

con 100 registros llenarás el espacio visible de un Grid, y cuando el usuario use el scroll se pedirá los demás datos.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 08-05-2008
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Cita:
pero en cualquier sistema va haber consultas como estas: 'Select * from tabla' tanto en Paradox como en Firebird, son indispensables,
Cierto, y se pueden hacer con Firebird perfectamente, si utilizas los componentes IBX o MDO el componente Table o Dataset correspondiente tiene la propiedad BufferChunks q se pone por defecto a 1000 q son nada para Firebird en local o en red, solo hay q evitar en ciertos momentos el uso innecesario de los metodos Last y Locate..
__________________
¿Microsoft? No, gracias..
Responder Con Cita
  #9  
Antiguo 08-05-2008
marilinspi marilinspi is offline
Miembro
 
Registrado: ene 2007
Posts: 136
Poder: 18
marilinspi Va por buen camino
Lepe... me intereso tu propuesta, me parecen los primeros 100 con mucha rapidez, pero como hago para que aparezca el resto cuando muevo el scroll. gracias a todos
Responder Con Cita
  #10  
Antiguo 09-05-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Pues parece que me he equivocado . Las pruebas con IB Expert así lo corrobora.

SELECT TOP 100 SKIP 20 * FROM [...] se suele utilizar para las páginas de noticias, para traer la tercera página de noticias. Intenta con la solución de Delfino

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #11  
Antiguo 13-05-2008
marilinspi marilinspi is offline
Miembro
 
Registrado: ene 2007
Posts: 136
Poder: 18
marilinspi Va por buen camino
hola les cuento que puede aumentar un poco la velocidad, haciendo los indices y las claves (igualmente no tiene la velocidad que me gustaria). Otra preguntita.... a la hora de guardar un nuevo registro, si o si hay que hacer un refresh? no hay manera de evitarlo, yo en el SqlDataSet y en ClientDataSet al campo clave en la propiedad InKey=true y en el DataSetProvider UpDateMode=WhereKeyOnly, no se si esta bien?. Espero sus ayudas, gracias desde ya
Responder Con Cita
  #12  
Antiguo 14-05-2008
marilinspi marilinspi is offline
Miembro
 
Registrado: ene 2007
Posts: 136
Poder: 18
marilinspi Va por buen camino
Que alguien me conteste... se puede o no evitar los refresh? y si es si, como? saquenme la duda. gracias
Responder Con Cita
  #13  
Antiguo 15-05-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Yo no he usado clientDatasets, esperemos una respuesta en condiciones por parte de otros foristas.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #14  
Antiguo 19-05-2008
JMG JMG is offline
Miembro
 
Registrado: may 2005
Posts: 10
Poder: 0
JMG Va por buen camino
Buenas...

Cuando hice mi primera aplicación sobre interbase, hace ya muchos años, una migración de otra hecha en clipper y dbase, las primeras pruebas de rendimiento en local y con pocos registros (10.000-15.000) me daba más velocidad la antigua aplicación sobre dbase que la nueva. Al principio me espanté, yo había vendido como gran ventaja de interbase que aumentaríamos la velocidad (algunos procesos en el viejo sistema tardaban más de 40 horas). Ahora bien, el destino final era trabajar en modo cliente-servidor, con varias decenas de usuarios grabando intensivamente y con aprox.1.500.000 de registros al mes. Cuando hice las primeras pruebas "en real", con usuarios y volumen de datos, me di cuenta de que las ventajas de interbase: los tiempos no crecían en progresión geométrica como en dbase y algunos de aquellos procesos que antes tenían que esperar al fin de semana para lanzarlos, ahora los podían ejecutar en cualquier momento porque no afectaban al rendimiento de los grabadores y tenían el resultado la misma mañana.

En conclusión, cada cosa es para lo que es, una base de datos de escritorio es para eso, para uso en un solo ordenador y con un límitado número de registros, y un SGBDR es para cargar con un buen volumen de datos y en entornos multiusuarios. Pretender que Interbase/Firebird siempre será más rápido que paradox/dbase/access/... es una tontería.

Un saludo,
Responder Con Cita
  #15  
Antiguo 21-05-2008
arrayman arrayman is offline
Miembro
 
Registrado: abr 2006
Posts: 55
Poder: 19
arrayman Va por buen camino
no entiendo muy bien tu necesidad de hacer un select * from tabla
lo normal es que filtres con un where en la select no obstante el clientdataset tiene tambien una propiedad que le indica cuantos debe recuperar (packedrecords). digamos que hace un select * pero los trae de n en n siendo n el nº indicado en packedrecods (esto es diferente del uso de top skip en cuyo caso lo gestionas tu y yo no te aconsejaria que uses las dos cosas a la vez) en cualquier caso pienso que salvo pequeñas tablas satelite deberias evitar en la medida de lo posible recuperar todos los registros de una tabla.
Responder Con Cita
  #16  
Antiguo 21-05-2008
arrayman arrayman is offline
Miembro
 
Registrado: abr 2006
Posts: 55
Poder: 19
arrayman Va por buen camino
perdon, pero olvide algo, en cuanto a la configuracion de pinfKey yo la asigno tanto en el clientdataset como en el sqldataset aunque sospecho que es esta ultima la que realmente actua, es un poco confuso para mi, supongo que al poder utilizar el clientdataset con diversos componentes por ejemplo un adodataset o incluso un ttable pues el comportamiento dependera de con cual lo uses. con sqldataset creo que manda la configuracion de los campos persistentes de este ultimo pero como te digo yo lo configuro en los dos.
Responder Con Cita
  #17  
Antiguo 26-05-2008
marilinspi marilinspi is offline
Miembro
 
Registrado: ene 2007
Posts: 136
Poder: 18
marilinspi Va por buen camino
Muchisimas gracias arrayman era lo que necesitaba, como soy nueva en el uso de estos componentes no sabia de la existencia de la propiedad PacketRecords y la verdad que la velocidad de acceso mejoro un 100%.
Gracias a todos, entre todos logramos que la velocidad de accedo a los datos haya mejorado notoriamente, este hilo sera de gran utilidad a los que recien comienzan a utilizar estos componentes.
Responder Con Cita
Respuesta



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
Windows server 2003 SP2 firebird 1.5 lento hugoaponce Firebird e Interbase 4 05-03-2008 18:59:43
Procedure en Firebird lento o IbQuery lento capo979 Firebird e Interbase 14 17-07-2007 21:35:36
Prepare lento en Firebird.. y en MySQL?? xander MySQL 11 01-11-2006 03:02:36
De Paradox a Firebird morta71 Firebird e Interbase 5 05-10-2006 20:31:24
Que tan lento es el DBE en red? usando Paradox orfeo Conexión con bases de datos 0 02-07-2003 08:51:08


La franja horaria es GMT +2. Ahora son las 20:05:26.


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
Copyright 1996-2007 Club Delphi