¿Datos anexados o Creación de Tabla?

06/06/2019 - 14:19 por madurga.pda | Informe spam
Hola a todos y gracias por adelantado.

El caso que presento es el de una tabla de unos 200.000 registros que debe actualizarse diariamente.
Esa actualización comporta unos 1500 registros nuevos, unos 20.000 actualizados, y unos 1500 eliminados.

Actualmente aplico una consulta de creación de tabla, eliminando la tabla del dia anterior y volviendo a cargar los 200.000 registros ya actualizados, asumiendo que pierdo el diseño de la tabla.

Lo ideal seria una consulta de eliminación de todos los datos seguida de una consulta de datos anexados de los 200.000 registros del dia, conservando de esa manera el diseño de la tabla, formatos de campo, etc.

El problema es que observo que este segundo procedimiento me lleva muchísimo tiempo, llegando incluso a colapsar la aplicación.

De la misma manera, intentar partir esta operaciòn en tres consultas (datos anexados para los nuevos registros, actualización para los existentes y consulta de eliminación para los eliminados) también consume muchísimo tiempo y llega a colapsar la aplicación en la fase de actualización.

Alguien tiene respuesta sobre la diferencia de estos tipos de consulta de acción y qué método puede resultar más eficiente en mi caso?

Quizás algun truco para que la consulta de datos anexados o la de actualización fluya más rápidamente?

Muy agradecido de antemano.

Saludos.

Carlos

Preguntas similare

Leer las respuestas

#1 José Mª Fueyo
07/06/2019 - 12:24 | Informe spam
Hola
No nos comentas que versión de Access utilizas.
Para la actualización e inserción ¿tienes creado algún índice? tanto para la table de destino como la de origen.
Aunque Access de forma nativa no soporta la instrucción TRUNCATE TABLE, sí lo he visto usandola a través de Application.CurrentProject.Connection.Execute, aunque sospecho que te puede dar problemas de interbloqueo por dejar conexiones abiertas.
Un DoCmd.RunSQL "DELETE FROM Tabla;" ¿te retarda mucho?
Salu2,

José Mª Fueoy
Respuesta Responder a este mensaje
#2 madurga.pda
08/06/2019 - 00:34 | Informe spam
Hola, Jose Mª. Gracias por contestar.

La versión de Access es 2010.
La instrucción DELETE FROM... se ejecuta con bastante rapidez. El problema viene a continuación con CREATE TABLE... (200.000 a 250.000 registros) con unos 20 campos, la mayoria índices Entero Largo, tarda unos 45 minutos en ejecutarse, si nadie le sopla...


El planteamiento inicial, y creo que el más lógico, se basaba en actualizar registros (INSERT INTO) y sólo añadir los nuevos del dia anterior, pero ese proceso de actualización se colgaba.

El comentario fácil és el de "Access no está pensado para eso"... pero es mi herramienta... y con ella hemos hecho cosas impensables, muchas gracias a foros como este.

Me dices que es importante que ambas tablas tengan un PK, un índice único y és así.

Saludos

Hola
No nos comentas que versión de Access utilizas.
Para la actualización e inserción ¿tienes creado algún índice? tanto para la table de destino como la de origen.
Aunque Access de forma nativa no soporta la instrucción TRUNCATE TABLE, sí lo he visto usandola a través de Application.CurrentProject.Connection.Execute, aunque sospecho que te puede dar problemas de interbloqueo por dejar conexiones abiertas.
Un DoCmd.RunSQL "DELETE FROM Tabla;" ¿te retarda mucho?
Salu2,

José Mª Fueoy
Respuesta Responder a este mensaje
#3 José Mª Fueyo
10/06/2019 - 09:57 | Informe spam
Hola de nuevo
¿Tienes algún criterio de selección, o haces alguna combinación entre tablas? de ser así, deberías crearte los índices correspondientes. Puedes crearte hasta 32 por cada tabla, y puedes incluir varios campos por cada tabla.
Salu2,

José Mª Fueyo
Respuesta Responder a este mensaje
#4 José Mª Fueyo
10/06/2019 - 10:42 | Informe spam
El lunes, 10 de junio de 2019, 9:57:54 (UTC+2), José Mª Fueyo escribió:
Hola de nuevo
¿Tienes algún criterio de selección, o haces alguna combinación entre tablas? de ser así, deberías crearte los índices correspondientes. Puedes crearte hasta 32 por cada tabla, y puedes incluir varios campos por cada tabla.
Salu2,

José Mª Fueyo



Perdón, quería decir que podías incluir varios campos por cada índice.
Salu2,

José Mª Fueyo
Respuesta Responder a este mensaje
#5 madurga.pda
13/06/2019 - 08:11 | Informe spam
Hola y gracias de nuevo.

En efecto, la consulta de creación de tabla (o de actualización) combina múltiples tablas.

Intento averiguar cuál de los dos planteamientos és más eficiente en el manejo de gran cantidad de registros (250K): el de actualizar y añadir los nuevos registros o el de crear directamente una nueva tabla.

De momento probaré a indexar todos los campos susceptibles de serlo, a ver cuanta mejora puede suponer en uno u otro sistema. Mis tablas tienen los índices básicos (en el autonumérico y en los campos ID de relación con otras tablas).

Las pruebas con tal cantidad de datos requieren mucho tiempo pero compartiré conclusiones a medida que las vaya alcanzando.

Muchas gracias por el interés.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida