Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   problema de velocidad con mysql y delphi 6 (https://www.clubdelphi.com/foros/showthread.php?t=63212)

Byfed 03-02-2009 19:20:54

problema de velocidad con mysql y delphi 6
 
Hola a todos,

Estoy corrigiendo una aplicación que tira contra una base de datos mysql (5.0.16-nt) que hacía uso de componentes Ttable. Al principio la aplicación funcionaba bien, pero a medida que las tablas han ido creciendo se ha ido haciendo cada vez más lenta, hasta dejarla inútil por completo.

Pues bien, he modificado el código para que no utilice esos componentes y se traiga la información que se necesite en cada momento mediante Tqueries. Además, he añadido algunas funcionalidades nuevas, lo que me ha llevado a modificar la base de datos.

Al final, trabajando sobre esa base de datos modificada (la llamaremos B) obtuve un funcionamiento razonablemente bueno. Originalmente era una versión "liviana" de la base de datos real (que será A). Vamos, que eliminé registros para que no hubiera tantos y tal y sobre esa versión ligera hice modificaciones.

Cuando estaba satisfecho con el resultado, me dispuse a probar el programa sobre A en lugar de B, para lo que he tenido que hacer las mismas modificaciones que hice en B. He puesto especial cuidado en crear todas las tablas nuevas, y en crear los campos nuevos allá donde hacía falta y replicar todos los índices que había en B.

Pues bien, ahora, cuando abro el proyecto de delphi en el IDE (delphi6), tarda muchiiiisimo tiempo en abrirse dicho proyecto. Bueno, en realidad no se si tarda mucho o no, porque aún no lo he visto acabar de cargar. Y he llegado a esperar hasta 10 minutos. Al final tengo que cerrarlo todo, porque me echa abajo el equipo.

¿A alguien se le ocurre qué puedo estar haciendo mal? ¿donde mirariaís vosotros si os pasara algo así?.

Datos adicionales:

* DB A (la real)
La mayoría de las tablas son pequeñitas. solo hay dos que me preocupan:
1. la tabla clientes que tiene 3466 registros, pero ocupa la friolera de 1.1Gb (cada cliente tiene varios campos blob donde se meten ficheros y fotos y demás, que se almacenan en la propia base de datos) (me lo encontré así, yo hubiera preferido no hacerlo así, pero bueno).
2. La tabla trabajos, que tiene 10245 registros y ocupa 788 Mb
Cuando uso esta base de datos, ni si quiera me llega a cargar el entorno.

* DB B (versión recortada y modificada de la A)
1. la tabla clientes tiene 1200 registros y ocupa 150 mb aprox.
2. la tabla trabajos tiene unos 5000 registros y ocupa 50 mb aprox.
Con esta versión, el programa va bien.

Pregunta: ¿qué hace el entorno de delphi cuando abres un proyecto que usa mysql? Porque se tira un rato ejecutando consultas (el icono de reloj de arena con sql debajo) que no se de donde salen.

Si podéis ayudarme con esto estaría muy agradecido, porque ya no se por donde mirar.

Gracias y un saludo.

roman 03-02-2009 19:33:24

Posiblemente dejaste los TQuery abiertos (propiedad Active en true) por lo que el IDE intenta cargar todos los registros al momento de abrir el proyecto.

Ahí quizá te sirva editar a mano el dfm del formulario o datamodule donde tengas tus componentes y poner en false esa propiedad. Esto para que puedas abrir el proyecto.

En cuanto a lo demás, el número de registros es muy pequeño como para causar problemas por sí sólo, así que es posible que la bronca esté en todos los campos blob que mencionas. Lo adecuado sería que no selecciones todos los campos en el Query sino sólo los necesarios para identificar un registro, y cuando se requiera el resto de la información para un registro determinado, mandas traer los demás campos.

// Saludos

Byfed 03-02-2009 23:25:01

Muchas gracias
 
Pues mira tu por donde, que no se me había pasado eso. Estoy seguro de que ese es el problema.

También había pensado, para acelerar un poco la carga del programa, hacer que el único formulario que se crease automáticamente fuera el principal y luego ir creándolos según se van llamando.

¿Alguien tendría la amabilidad de ponerme aquí un ejemplo chorra de cómo crear un formulario en tiempo de ejecución?. Lo suyo es que, primero hay que verificar si ya está creado, y si no lo está, crearlo. ¿Sería aplicable lo mismo a los frames?

Roman, gracias miles por la rapidez de tu respuesta. Mañana probaré lo de las queries, pero vamos, que seguro que es eso, porque se me ha pasado por completo. :) (soy novatillo).

Salu2


La franja horaria es GMT +2. Ahora son las 04:05:30.

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