** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Tus Funciones Favoritas & Aportaciones & Artí­culos
  Mensajes nuevos Mensajes nuevos RSS - Comparativa velocidad tablas adjuntas Vs Database
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoComparativa velocidad tablas adjuntas Vs Database

 Responder Responder
Autor
Mensaje
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: España
Estado: Sin conexión
Puntos: 9192
Enlace directo a este mensaje Tema: Comparativa velocidad tablas adjuntas Vs Database
    Enviado: 20/Febrero/2017 a las 13:49
Esto es un pequeño artículo en el que detallo unas pruebas muy simples de velocidad, entre trabajar con tablas adjuntas, tablas declaradas con la cláusula IN o con una Database externa.

Tiene unos años y sé que está en la página del jefe, pero soy incapaz de encontrarlo, así que aún desfasado (está hecho sobre WIN XP-PRO y creo que Access 2003) los resultados son muy significativos.

Un saludo.





*********************************************************************************

Esto empezó con una serie de pruebas de velocidad.... trataba de ver si era mas rápido trabajar con tablas adjuntas, o con tablas declaradas con cláusula IN....

Las pruebas las hago con dos PC’s en red, ambos en XP-PRO, el fichero sobre el que trabajo tiene 135.000 registros y la prueba que hago es cambiar un el valor de un campo seleccionando por un índice.... (para ser exactos el precio de las cuatro líneas de un albaran). Hago la prueba con un recordset y con SQL... El proceso lo realizo cien veces para que ‘de tiempo’.... en ambos casos los tiempos son tomados con otro recordset abierto –la tabla tonta-
 
Este es el código que utilizo.....
 
1.- TABLA ADJUNTA
 
For i = 1 To 1000
    Set Mitabla = CurrentDb.OpenRecordset("SELECT * FROM [Historico albaranes lineas]  WHERE Numero_hlalb  = 15")
    Do Until Mitabla.EOF
        Mitabla.Edit
        Mitabla!Importe_hlalb = 33
        Mitabla.Update
        Mitabla.MoveNext
    Loop
    Mitabla.Close
Next I
 
For i = 1 To 1000
    CurrentDb.Execute "UPDATE [Historico albaranes lineas] SET Importe_hlalb = 33 WHERE Numero_hlalb = 15"
Next I
 
2.- CLAUSULA IN (sin tablas adjuntas)
 
For i = 1 To 1000
    Set Mitabla = CurrentDb.OpenRecordset("SELECT * FROM [Historico albaranes lineas] IN '\\Pcuno\Tecsys\Somat-bd.mdb' WHERE Numero_hlalb  = 15")
    Do Until Mitabla.EOF
        Mitabla.Edit
        Mitabla!Importe_hlalb = 33
        Mitabla.Update
        Mitabla.MoveNext
    Loop
    Mitabla.Close
Next I
 
For i = 1 To 1000
    CurrentDb.Execute "UPDATE [Historico albaranes lineas] IN '\\Pcuno\Tecsys\Somat-bd.mdb' SET Importe_hlalb = 33 WHERE Numero_hlalb = 15"
Next I
  
Los tiempos fueron de 3 segundos tanto con recordset como con SQL en ambas modalidades...... es decir ambos sistemas son equivalentes,....
 
La ‘sorpresa’ vino después, cuando probé con una database externa declarada de la siguiente forma....
 
Set ExDatabase = DBEngine.Workspaces(0).OpenDatabase("\\Pcuno\Tecsys\Somat-bd.mdb")
For i = 1 To 1000
    Set Mitabla = ExDatabase.OpenRecordset("SELECT * FROM [Historico albaranes lineas]  WHERE Numero_hlalb  = 15")
    Do Until Mitabla.EOF
        Mitabla.Edit
        Mitabla!Importe_hlalb = 33
        Mitabla.Update
        Mitabla.MoveNext
    Loop
    Mitabla.Close
Next I
 
For i = 1 To 1000
    ExDatabase.Execute "UPDATE [Historico albaranes lineas] SET Importe_hlalb = 33 WHERE Numero_hlalb = 15"
Next I
 
Remarco las diferencias en rojo, con el procedimiento seguido con tabla adjunta...
 
Tuvo que subir el número de bucles a 1.000, porque si no, no podía tomar tiempos....
 
En base adjunta 1000 bucles tardaban 27 segundos..... y con Database externa 1.88, es decir una relación de más de 14:1







Editado por Mihura - 20/Febrero/2017 a las 13:49
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable