Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-08-2011
juanlito juanlito is offline
Miembro
NULL
 
Registrado: ago 2011
Ubicación: Jerez de la Frontera
Posts: 14
Poder: 0
juanlito Va por buen camino
Optimizacion De Rendimiento

Buenas a todos,

Soy nuevo en el foro y tengo un problema(como casi todos los nuevos)
Tengo una aplicacion que accede a una BD de access, he realizado las consultas y el codigo y me funciona sin errores, el problema es que en la tablas hay muchos registros, en una de ellas unos 114000 y en otra unos 270000, debido a esto la ejecuccion de mi codigo se eterniza hasta limites increibles, media hora para un codigo como el siguiente

Código:
 
Datamodule1.Query2.Active:=true;
  datamodule1.Query2.First;
  while not(datamodule1.Query2.Eof) do
  begin
   try
     datamodule1.Tbtic.Insert;
     datamodule1.Tbtic.FieldByName('telno').AsString:=datamodule1.Query2.fieldbyname('telno').AsString;
     datamodule1.Tbtic.FieldByName('duratime').AsString:=datamodule1.Query2.fieldbyname('duratime').AsString;
     datamodule1.Tbtic.FieldByName('address').AsString:=datamodule1.Query2.fieldbyname('address').AsString;
     datamodule1.Tbtic.FieldByName('rptime').AsDateTime:=datamodule1.Query2.fieldbyname('rptime').AsDateTime;
     datamodule1.Tbtic.FieldByName('sumcoin').AsFloat:=datamodule1.Query2.fieldbyname('sumcoin').AsFloat;
     datamodule1.Tbtic.FieldByName('dialno').AsString:=datamodule1.Query2.fieldbyname('dialno').AsString;
     cad:= copy(datamodule1.Query2.fieldbyname('starttime').AsString,7,2)+'/'+copy(datamodule1.Query2.fieldbyname('starttime').AsString,5,2)+'/';
     cad:=cad+ copy(datamodule1.Query2.fieldbyname('starttime').AsString,0,4)+' '+copy(datamodule1.Query2.fieldbyname('starttime').AsString,9,2)+':';
     cad:=cad+ copy(datamodule1.Query2.fieldbyname('starttime').AsString,11,2)+':'+copy(datamodule1.Query2.fieldbyname('starttime').AsString,13,2);
     fecha:=strtodatetime(cad);
     datamodule1.Tbtic.FieldByName('starttime').AsDateTime:=fecha;
     numero_largo:=datamodule1.Query2.fieldbyname('dialno').AsString;
     posicion:=(pos('F',numero_largo));
     if posicion<> 0 then
     begin
       numero:= copy(numero_largo,0,posicion-1);
     end
     else
     begin
       numero:=numero_largo;
     end;
     datamodule1.Tbtic.FieldByName('dialno').AsString:=numero;
     datamodule1.Tbtic.Post;
   except
     showmessage('No se ha podido guardar con exito');
   end;
     datamodule1.Query2.Next;
  end;
el codigo sql del query2 es una simple consulta como la siguiente

Código SQL [-]
SELECT PHONE.TELNO AS TELNO, PHONE.ADDRESS AS ADDRESS, TAG26.RPTIME AS RPTIME, TAG26.STARTTIME AS STARTTIME, TAG26.DURATTIME AS DURATIME, TAG26.SUMCOIN AS SUMCOIN, TAG26.DIALNO AS DIALNO
FROM PHONE, TAG26
WHERE PHONE.IDNO=TAG26.IDNO;

no se que hacer, si alguien me dice que migre todo de access a otro creo que lo hare, uso access porque es la BD que me encontre y en la que despues he ido agregando mas tablas y registros, pero ahora tengo este problema.

Me gustaria alguna respuesta en la que no tuviese que migrar los datos, pero Agradeceria cualquier ayuda.

Muchas Gracias

Última edición por juanlito fecha: 17-08-2011 a las 11:02:05.
Responder Con Cita
  #2  
Antiguo 17-08-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.471
Poder: 21
newtron Va camino a la fama
Hola.

El problema que estás teniendo es normal al usar bases de datos de escritorio que cuantos más registros tienen el rendimiento cae en picado.
Por aquí seguramente te van a recomendar que te pases a firebird. Es una buena opción pero con el problema de que seguramente tendrás que cambiar algo de código de tu aplicación porque la forma idonea de usar este tipos de bases de datos es con instrucciones sql y no hacer uso de componentes ttable.

Otra opción sería cambiar a firebird y buscar componentes ttable para esta base de datos, que los hay, para que tengas que cambiar el mínimo de código posible.

Saludos
__________________
Be water my friend.
Responder Con Cita
  #3  
Antiguo 17-08-2011
juanlito juanlito is offline
Miembro
NULL
 
Registrado: ago 2011
Ubicación: Jerez de la Frontera
Posts: 14
Poder: 0
juanlito Va por buen camino
Muchas gracias por tu respuesta Newtron.

Imaginaba el cambio por ti propuesto, muchas gracias.

una consulta.

Si cambio a Firebird, puedo usar los componentes de interbase que me trae mi delphi 7?? si pudiese usar esos componentes posiblemente casi que no tendria que cambiar mi codigo, solo enlazar dichos componentes con firebird.(no he usado nunca firebird y no se si puedo hacer esto)

A ver si alguien me da solucion con access sino me pondre a esto.
Responder Con Cita
  #4  
Antiguo 17-08-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.471
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por juanlito Ver Mensaje
Si cambio a Firebird, puedo usar los componentes de interbase que me trae mi delphi 7??
Lo siento pero no tengo ni idea pero seguro que algún otro forero te contestará a esto que preguntas.

Saludos
__________________
Be water my friend.
Responder Con Cita
  #5  
Antiguo 17-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 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 juanlito y bienvenido a los foros de Club Delphi.
Cita:
Si cambio a Firebird, puedo usar los componentes de interbase que me trae mi delphi 7??
La respuesta es un rotundo SI.

Te pongo unos enlaces que te servirán. (Uno se refiere a Interbase pero sirve para Firebird igualmente)
. Delphi conectar Firebird con IBX
. Interbase e IBX

Un saludo.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 17-08-2011 a las 12:39:36.
Responder Con Cita
  #6  
Antiguo 17-08-2011
juanlito juanlito is offline
Miembro
NULL
 
Registrado: ago 2011
Ubicación: Jerez de la Frontera
Posts: 14
Poder: 0
juanlito Va por buen camino
Muchas gracias.

Pues al lio me pongo, mientras esperaba respuestas he estado viendo un post en el que caral explicaba la instalacion y conexion basica con firebird.

Una ultima question, en el equipo donde tendria que ir instalado el servidor, tengo un MS SQL SERVER 2005 corriendo para una aplicacion externa de uso de mi trabajo.

Puedo instalar firebird sin ningun tipo de conflicto con MS SQL SERVER? tendre problema con los puertos o algo parecido?
Es que para probar que gane en rendimiento puedo instalar firebird en mi equipo local pero luego tendre que usarlo para todos los usuarios en el servidor, y no quiero migrar toda la bd y luego tener problemas de incompatibilidades.

Preguntareis porque no uso MS SQL SERVER en vez de firebird, posiblemente porque firebird es del que he recibido respuesta optima para mejor mi rendimiento y ademas visitando el foro antes de preguntar he observado que era el mas usado por aqui.

Gracias
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
Optimización! Optimización! PiornoCKA&G Varios 1 31-12-2006 20:45:30
Optimización Rendimiento dB amesoft SQL 1 05-08-2006 06:26:37
optimizacion del SQL seb@ SQL 1 22-09-2004 19:55:24
Optimizacion manuelpr Conexión con bases de datos 3 30-07-2004 17:26:24
Rendimiento y optimizacion de una aplicacion erickperez6 Varios 2 10-09-2003 01:12:32


La franja horaria es GMT +2. Ahora son las 21:39:43.


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