![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Mejorar velocidad de un SQL al consultar muchos datos.
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:
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:
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. |
#2
|
||||
|
||||
Hola,
prueba con esto : update TANAMNESIS a set a.FECHA_AUTORIZADA = cast('now' as date) where not exists (select * from temporal t where t.IDANAMNESIS_TEXTO=a.idanamnesis_texto) Saludos
__________________
Más se perdió en la guerra... y volvieron cantando |
#3
|
||||
|
||||
Cita:
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#4
|
||||
|
||||
Ya lo solucione, y me da pena decir como... pero bueno... todo radicaba en que no tenia indices en ninguna de las dos tablas, y lo arregle colocando IDANAMNESIS_TEXTO como indice en las dos tablas:
Nota: Tambien probe con pero sin los indices seguia igual de lento
Muchas gracias por sus respuestas |
![]() |
|
|
![]() |
|