** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y Otros sistemas
  Mensajes nuevos Mensajes nuevos RSS - Rendimiento entre Access y MySQL
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoRendimiento entre Access y MySQL

 Responder Responder Página  12>
Autor
Mensaje
Ueshiba Ver desplegable
Habitual
Habitual


Unido: 12/Febrero/2008
Localización: España
Estado: Sin conexión
Puntos: 85
Enlace directo a este mensaje Tema: Rendimiento entre Access y MySQL
    Enviado: 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


Arriba
E. Feijoo Ver desplegable
Moderador
Moderador


Unido: 16/Abril/2004
Localización: España
Estado: Sin conexión
Puntos: 19948
Enlace directo a este mensaje Enviado: 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.
Arriba
Ueshiba Ver desplegable
Habitual
Habitual


Unido: 12/Febrero/2008
Localización: España
Estado: Sin conexión
Puntos: 85
Enlace directo a este mensaje Enviado: 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
Arriba
E. Feijoo Ver desplegable
Moderador
Moderador


Unido: 16/Abril/2004
Localización: España
Estado: Sin conexión
Puntos: 19948
Enlace directo a este mensaje Enviado: 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.
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 4834
Enlace directo a este mensaje Enviado: 04/Febrero/2015 a las 18:49
Solo para comentar que en Access Latino America (Capitulo de 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.


Editado por emiliove - 04/Febrero/2015 a las 20:22
Arriba
Ueshiba Ver desplegable
Habitual
Habitual


Unido: 12/Febrero/2008
Localización: España
Estado: Sin conexión
Puntos: 85
Enlace directo a este mensaje Enviado: 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?
Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 2920
Enlace directo a este mensaje Enviado: 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
Arriba
Ueshiba Ver desplegable
Habitual
Habitual


Unido: 12/Febrero/2008
Localización: España
Estado: Sin conexión
Puntos: 85
Enlace directo a este mensaje Enviado: 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?



Editado por Ueshiba - 06/Febrero/2015 a las 10:06
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 4834
Enlace directo a este mensaje Enviado: 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.
Arriba
Lunitary Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 09/Agosto/2005
Localización: España
Estado: Sin conexión
Puntos: 1351
Enlace directo a este mensaje Enviado: 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.
Arriba
Ueshiba Ver desplegable
Habitual
Habitual


Unido: 12/Febrero/2008
Localización: España
Estado: Sin conexión
Puntos: 85
Enlace directo a este mensaje Enviado: 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
Arriba
Lucke Bis Ver desplegable
Habitual
Habitual
Avatar

Unido: 10/Marzo/2014
Localización: Pamplona
Estado: Sin conexión
Puntos: 119
Enlace directo a este mensaje Enviado: 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
Arriba
Ueshiba Ver desplegable
Habitual
Habitual


Unido: 12/Febrero/2008
Localización: España
Estado: Sin conexión
Puntos: 85
Enlace directo a este mensaje Enviado: 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
Arriba
E. Feijoo Ver desplegable
Moderador
Moderador


Unido: 16/Abril/2004
Localización: España
Estado: Sin conexión
Puntos: 19948
Enlace directo a este mensaje Enviado: 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).
Arriba
Lucke Bis Ver desplegable
Habitual
Habitual
Avatar

Unido: 10/Marzo/2014
Localización: Pamplona
Estado: Sin conexión
Puntos: 119
Enlace directo a este mensaje Enviado: 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
Arriba
 Responder Responder Página  12>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable