Buen día chely11
Haciendo uso de bulk colect o forall efectivamente mejora mucho el performance de la operación.
Pero mirando tu sentencia, tiene mucho que ver la consulta que utilizas al interior del UPDATE.
Código SQL:
Ver originalSELECT DIM_TIME.PK_TimeKey FROM DIM_TIME WHERE
CAST(tabla_P.FECHA AS TIMESTAMP)>=DIM_TIME.FullDateAlternateKey AND CAST(tabla_p.FECHA AS TIMESTAMP) <
(DIM_TIME.FullDateAlternateKey + 30/(24*60))
Yo empezaría analizando el plan de ejecución de esta consulta y mirando cuanto tarda normalmente su ejecución. Hipoteticamente si la consulta tarda tan solo 2 segundos, si mutiplicas esto por 1500000, vas a tener un proceso que podría tardar 3000000 de segundos equivalente a algo mas de 34 días.
Bajo este escenario, ni utilizando bulk collect ni forall vas a tener mejorias muy relevantes.
Si gustas, puedes publicar aca el plan de ejecución de la consulta y adicional el plan de ejecución del UPDATE completo
Saludos