Cordial saludo, tengo que validar un grupo de registros de forma periodica en una aplicación, estos registros estan de un rango de 10.000 a 13.000 registros en cada actualización, donde facilmente puede que se encuentren tansolo 20 o 30 registros diferentes, por ejemplo:
Tengo en una base de datos (Firebird 1.5) una tabla con 12.000 registros y hoy me pasan un archivo de una hoja de calculo con 9.000, eso quiere decir que estos ultimos 9.000 registros estan validados para el periodo de tiempo que comprende hoy hasta la proxima actulización, de forma tal que los que no estan en estos 9.000 registros no se pueden borrar de la base de datos, pero tampoco podran ser tomados en cuenta durante el periodo de tiempo determinado, ademas facilmente dentro de estos 9.000 se puede encontrar registros que no esten en la base de datos y por ende se deberan ingresar dentro de ella. Todo esto ya lo estoy haciendo pero es un proceso muy largo (en ocaciones pasa de 30 min).
Para mejorar la velocidad se me ocurrio guardar los registros que estan en la hoja de calculo en una tabla y posteriormente hacer una SQL, y es aquí donde aunqe se mejora la velocidad a la mita (15 min) sigue siendo muy demorado, como tal hago el siguente update:
Código SQL
[-]
update TANAMNESIS a set a.FECHA_AUTORIZADA = cast('now' as date)
wherea.IDANAMNESIS_TEXTO not in
(select t.IDANAMNESIS_TEXTO from TTEMPORAL t)
donde TANAMNESIS y TTEMPORAL tien un poco mas o un poco menos de 12.000 registros, a esto quedaria faltando insertar los datos nuevos que estan en TTEMPORAL, para esto pienso hacer un Procedimiento almacenado paresido a lo siguiente:
Código SQL
[-]
for select IDANAMNESIS_TEXTO, campo1, campo2 FROM TTEMPORAL a
where a.IDANAMNESIS_TEXTO not in
(select t.IDANAMNESIS_TEXTO from TANAMNESIS t)
into :IDANAMNESIS_TEXTO, :campo1, :campo2 do
begin
insert into ....
end
Pero tendria el mismo problema de velocidad y quedaria tal cual como inice (con un proceso de 30 min).
Mi pregunta es si existe una forma optima de hacer lo que yo quiero, lo que he notado es que la sub-consulta demora tremendamente el proceso.
De antemano muchas gracia por su ayuda.