Update masivo

02/12/2005 - 20:03 por Dario R. Ayala | Informe spam
Hola gente:
tengo una tabla con unos 27 millones de registros y tengo que hacer
un update muy sencillo pero que al ser tanto el volumen que esta
manejando me llena el log y cancela. El query es algo asi:

Update tabla1
set campo1 = 0
where campo2 = 0

resulta que de estos 27M de registros 26,5 tienen el campo2 en 0 y el
resto no. Esto lo resolví por ahora partiendo este insert en 10 partes
que se ejecutan desde mi aplicación de la siguiente manera:

Update tabla1
set campo1 = 0
where campo2 = 0 and right(campoId,1) = 'n' ( con n entre 0 y 9)

Esto resuelve el problema del llenado del log pero no me gusta, ya de
entrada el right no me deja aprovechar el indice en campoId, la pregunta
es: Conocen una mejor forma de hacer esto?
Gracias de antemano

Dario R. Ayala
darioaya@gmail.com
Desarrollador Microsoft DCE 2005 2 estrellas
Desarrollador Microsoft DCE 3 Estrellas
 

Leer las respuestas

#1 Alejandro Mesa
02/12/2005 - 20:16 | Informe spam
Dario,

La particion es buena idea, hacer el update por baches es la forma correcta
de proceder cuando tienes tantas filas que seran actualizadas. Tambien puedes
usar algo asi como:

while exists(select * from tabla1 where campo2 = 0)
update tabla1
set campo1 = 0
from (select top 10000 clave_primaria from tabla1 where campo2 = 0) as a
where tabla1.clave_primaria = a.clave_primaria
go


AMB

"Dario R. Ayala" wrote:

Hola gente:
tengo una tabla con unos 27 millones de registros y tengo que hacer
un update muy sencillo pero que al ser tanto el volumen que esta
manejando me llena el log y cancela. El query es algo asi:

Update tabla1
set campo1 = 0
where campo2 = 0

resulta que de estos 27M de registros 26,5 tienen el campo2 en 0 y el
resto no. Esto lo resolví por ahora partiendo este insert en 10 partes
que se ejecutan desde mi aplicación de la siguiente manera:

Update tabla1
set campo1 = 0
where campo2 = 0 and right(campoId,1) = 'n' ( con n entre 0 y 9)

Esto resuelve el problema del llenado del log pero no me gusta, ya de
entrada el right no me deja aprovechar el indice en campoId, la pregunta
es: Conocen una mejor forma de hacer esto?
Gracias de antemano

Dario R. Ayala

Desarrollador Microsoft DCE 2005 2 estrellas
Desarrollador Microsoft DCE 3 Estrellas

Preguntas similares