Imprimir página | Cerrar ventana

Rendimiento entre Access y MySQL

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y Otros sistemas
Descripción del foro: Proyectos ADP & Sql Server, Mysql& Access, MSDE
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=80214
Fecha de impresión: 17/Febrero/2020 a las 04:53


Tema: Rendimiento entre Access y MySQL
Publicado por: Ueshiba
Asunto: Rendimiento entre Access y MySQL
Fecha de publicación: 04/Febrero/2015 a las 09:40
Hola a todos.

Hice hace 4 años una base de datos en access (.mdb) que lee de unas tablas en MySQL.
Mientras hay pocos registros, el rendimiento no está mal pero, a partir de varios miles, (recomienza de 0 a principio de año) baja escandalosamente y las búsquedas algo complejas (o incluso las consultas en las que se basan los formularios) tardan bastante.

También he notado que tarda mucho más con Windows 7 x32 y Office 2010 (en un equipo nuevo) que con Windows XP y Office 2007 en un equipo mucho más antiguo.

Como no tengo grandes conocimientos a nivel de "optimización", empiezo a tener bastante claro que hay algo del diseño que debería haber hecho de otra forma pero no sé qué podría hacer para mejorar el rendimiento ni si es posible hacerlo.

¿Podéis darme alguna indicación al respecto?
Muchísimas gracias

César





Respuestas:
Publicado por: E. Feijoo
Fecha de publicación: 04/Febrero/2015 a las 10:13
La única forma que conozco de optimizar algo, es conociendo lo que esta ya creado, deberías exponer como has creado la interacción entre Access y MySQL, asi como la actual forma de acceder (a MySQL) con las consultas .... etc.

Si lo que se desea es conocer las mil y una forma de optimizar procesos, el foro (y toda internet) no serian suficientes para abarcar la información.


Publicado por: Ueshiba
Fecha de publicación: 04/Febrero/2015 a las 12:38
Gracias por responder.

Paso a explicarlo un poco más.
La base de datos está alojada en un servidor MySQL Server 5.0.22 propio con tablas en InnoDB.

La conexión con Access la he hecho vinculando las tablas a través de ODBC utilizando el "mysql connector odbc 5.1.10".

En rasgos generales, es una base de datos para hacer pedidos a proveedores. Las 2 tablas principales  son la de los pedidos (formulario principal) (proveedor, numero de pedido, solicitante, fecha, etc) y otra tabla (subformulario) con los datos de cada "línea" de pedido (concepto, precio, iva aplicado, etc).

El caso es que cuando se abre el formulario (con subformulario), tarda bastante en cargar la consulta en la que se basa el formulario, y lo mismo (o más) cuando tiene que hacer una búsqueda. Se nota especialmente cuando ya hay 3000 o 4000 registros.

No sé si estos datos son los que necesitabas. Disculpa si no es así.

Muchas gracias


Publicado por: E. Feijoo
Fecha de publicación: 04/Febrero/2015 a las 14:24
Si se utiliza a MySQL como simple (y grande) almacén de datos se esta perdiendo sus ventajas como tal contenedor de datos, recomendaría que si (el conjunto de datos) no supera los limites de tamaño que admita la versión (uno o dos gigabites) se efectue el proceso en Access (siempre será mas eficaz).

Todo ello en base a que se trabaja (en la aplicación) con tablas vinculadas.

NOTA:
Creo que este hilo esta incorrectamente ubicado, lo desplazare al foro adecuado en que los entendidos en esa combinación de entornos podrán dar las oportunas guías y consejos.


Publicado por: emiliove
Fecha de publicación: 04/Febrero/2015 a las 18:49
Solo para comentar que en Access Latino America (Capitulo de  http://accessusergroups.org/access-latino/" rel="nofollow - http://accessusergroups.org/access-latino/ ) el Miercóles 18 de Febrero, Carlos González (guarracuco) va a hablar de Access+Mysql remoto,  con recordset desconectado.
 
Saludos.


Publicado por: Ueshiba
Fecha de publicación: 05/Febrero/2015 a las 09:50
Gracias por responder.

No puedo utilizar únicamente Access porque son bastantes los usuarios que acceden simultáneamente a la base de datos y, además, se muestran datos en la intranet de nuestra web para los usuarios.

¿Algún consejo?


Publicado por: guarracuco
Fecha de publicación: 05/Febrero/2015 a las 14:25
Como comenta EmilioVe, puedes aumentar mucho el rendimiento trabajando con recordset desconectados.
No vinculas las tablas sino que te conectas, cargas los registros que necesitas en un recordset ADO, cierras conexión y te quedas con la data cargada en local.
Dependiendo del entorno, por ejemplo un sistema de reservaciones de asientos de un teatro o ventas de boletos, se puede implementar un reloj de manera que el usuario pueda tener ese registro cargado solo cierto tiempo. Pasado ese tiempo se refresca o se cierra el formulario para evitar duplicidad o modificación de dos o mas usuarios sobre un registro.
También se puede implementar a nivel de tabla utilizando una columna(campo) que indica que el registro está 'cargado' por algún servicio o módulo; de cuidado pero puede ser muy efectivo dependiendo de las necesidades.



-------------
https://tucondominioaldia.net


Publicado por: Ueshiba
Fecha de publicación: 06/Febrero/2015 a las 08:49
Gracias por responder.

Me temo que no sé como se trabaja de esa forma Cry. ¿Es alguna "configuración" que se le dice a Access para modificar su conexión a la BD de MySQL? ¿Es sencillo de hacer?
Lo cierto es que no sé nada al respecto. Por favor, ¿puedes ampliar la información y decirme donde puedo leer algo al respecto (desde nivel 0, me temo)?

Muchas gracias

Edito: He encontrado en los formularios de Access un opción para cambiar el Recordset de "Dynaset" a "Snapshot". Al cambiar a Snapshot, las búsquedas son casi instantáneas pero, por lo que he leído, no me dejará cambiar nada del registro (que es imprescindible para mi). El caso es que yo sí he podido cambiar datos del registro pero no se almacena "de verdad"en la base de datos. A lo mejor pregunto una obviedad pero: 

¿se puede cambiar el tipo de recordset a Dynaset una vez abierto el formulario y buscado un registro (por ejemplo con un botón en VBA) y así poder modificar el registro?



Publicado por: emiliove
Fecha de publicación: 06/Febrero/2015 a las 15:33
En la reunión Carlos hará un ejemplo desde el principio y podrás preguntar dudas al respecto, cualquiera con una conexión a internet se puede unir, es completamente gratis, si entras a la página que te puse, ya Juan Soto hablo sobre el tema pero el con SqlServer, puedes buscar el video y ver de que se trata.
También si haces una busqueda por recordset desconectado seguro que encuentras mucho material en el foro.
 
Saludos.


Publicado por: Lunitary
Fecha de publicación: 06/Febrero/2015 a las 15:57
Una pregunta; en servidor de MySql, en que tipo de maquina lo tienes instalado?.
Si por casualidad es una maquina con windows Server puedes activar el rol de servidor de terminales (si dispones de las licencias) y atacar por terminal server, el rendimiento aumenta expectacularmente.



-------------
Un aladroque.


Publicado por: Ueshiba
Fecha de publicación: 09/Febrero/2015 a las 09:54
Gracias por responder.

Emiliolove, estaré pendiente los días posteriores por si colgáis el vídeo, ya que  a esa hora me resulta imposible estar conectado.

Lunitary, el MySQL está instalado en un servidor Linux :(

Mientras encuentro una solución definitiva repito una de las preguntas, ¿sabéis si se puede cambiar el tipo de recordset a Dynaset una vez abierto el formulario de Access y buscado un registro (por ejemplo con un botón en VBA) y así poder modificar el registro?

Muchas gracias


Publicado por: Lucke Bis
Fecha de publicación: 09/Febrero/2015 a las 22:04
Yo trabajo en Access contra SQL Server (ODBC) y tenía el mismo problema cuando el origen de datos era una consulta con varias tablas.
Lo resolví pasando la consulta de Access a una Vista de SQL y vinculando esta Vista como tabla vinculada en Access.
La diferencia de rendimiento es espectacular.
No soy ningún experto, pero si te sirve de algo...


-------------
Gracias por vuestra ayuda


Publicado por: Ueshiba
Fecha de publicación: 10/Febrero/2015 a las 08:51
Gracias por responder.
Creo que no acabo de entenderte. ¿Te refieres a la consulta en la que está basado el formulario? ¿Puedes explicarme más detallado como hacer eso?
Gracias


Publicado por: E. Feijoo
Fecha de publicación: 10/Febrero/2015 a las 09:43
Ojo con las respuestas, se trata de un entorno similar (Access + SQL Server), de cualquier forma se trata de generar consultas 'que corran' en el servidor, Access (por defecto y con tablas vinculadas) las genera en local, lo que implica 'traer' a todo el conjunto de datos (y para eso se requiere tiempo extra).

Quizás te interese leer todo lo que puedas sobre 'consultas de paso a través' (se ejecutarían en el servidor y solo se recibirían sus resultados, lo cual seria la solución optima).


Publicado por: Lucke Bis
Fecha de publicación: 10/Febrero/2015 a las 15:16
Como dice Feijoo el entorno es similiar; yo estoy con SQL Server, no con MySQL.

Yo genero una vista en el servidor SQL y la grabo con un nombre "MiConsulta". Después, en Access vinculas esta vista "MiConsulta" como si fuera una tabla y la pones como origen de datos de tu formulario.

Para Access es como si fuera una tabla.


-------------
Gracias por vuestra ayuda


Publicado por: Ueshiba
Fecha de publicación: 16/Febrero/2015 a las 09:44
Buenos días.
Perdona por la tardanza en responder pero estaba haciendo pruebas con las consultas de paso a través.

En principio todo parece funcionar bien usando este tipo de consultas como origen del formulario de Access pero estoy confuso porque hay algún campo que me deja modificar (concretamente todos los del subformulario)  y otros no , dice "no se puede actualizar este recordset".

El algunos sitios he leído que usando consultas de paso a través no se pueden modificar los registros pero en otros dicen que si (y de hecho, como os decía, yo puedo modificar algunas cosas).

¿Alguien puede aportarme un poco de luz?
Muchas gracias

Edito: Estoy cayendo en que el formulario está basado en 5 tablas (que son las que no me deja tocar) y el subformulario (que si puedo tocar) lee de otra tabla diferente que no lee normalmente a traves de ODBC :(


Publicado por: E. Feijoo
Fecha de publicación: 16/Febrero/2015 a las 12:43
Que algo sea o no modificable, dependerá de como se acceda a los datos, 'normalmente' si se pueden definir de forma única: modificable, en otro caso: no-modificable, por ello las consultas de datos cruzados y de totales suelen ser del tipo no-modificable.

Es por lo tanto 'tan dependiente' del diseño y manejo de esos datos en particular, que no se puede generalizar o aplicar una solución única .... siempre quedara el acceder (a esos mismos datos a modificar) por un acceso mas directo (y regenerar la consulta 'compleja' que los lee)



Imprimir página | Cerrar ventana