Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Duda optimizacion sentencias sql

Estas en el tema de Duda optimizacion sentencias sql en el foro de SQL Server en Foros del Web. Hola tengo una duda: ¿ Seria mas eficiente añadir 2 campos en una tabla que tiene muchisimos registros con sentencias individualizadas o en una sentencia ...
  #1 (permalink)  
Antiguo 16/02/2012, 10:03
 
Fecha de Ingreso: marzo-2007
Mensajes: 39
Antigüedad: 17 años, 1 mes
Puntos: 0
Duda optimizacion sentencias sql

Hola tengo una duda:

¿ Seria mas eficiente añadir 2 campos en una tabla que tiene muchisimos registros con sentencias individualizadas o en una sentencia conjunta?

Pongo un ejemplo:

alter table registro_accesos add reac_mens_recibido SMALLINT DEFAULT 0 NOT NULL
alter table registro_accesos add reac_mens_enviado SMALLINT DEFAULT 0 NOT NULL


alter table registro_accesos add (reac_mens_recibido SMALLINT DEFAULT 0 NOT NULL, reac_mens_enviado SMALLINT DEFAULT 0 NOT NULL)

Gracias de antemano.
  #2 (permalink)  
Antiguo 16/02/2012, 10:32
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda optimizacion sentencias sql

segun yo es lo mismo.......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 16/02/2012, 19:16
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Respuesta: Duda optimizacion sentencias sql

Siempre es más eficiente agregar las dos columnas en una única sentencia, aunque la ventaja puede ser más o menos apreciable dependiendo el caso.

1. Si agregar las columnas requiere modificar las filas (ADD column_name1 NOT NULL DEFAULT valor, column_name2 NOT NULL DEFAULT valor) el comando ALTER TABLE ejecuta un update de toda la tabla para que las columnas nuevas tengan el valor por defecto, en este caso y con tablas de gran tamaño, la ventaja será más evidente, por ejemplo:

Código:
alter table t1 add 
 c1 int not null default 1, 
 c2 int not null default 2
--internamente el motor ejecuta un update
--update t1 set c1=1, c2=2

--vs

--dos update, uno por cada alter table
alter table t1 add 
 c1 int not null default 1 
--update t1 set c1=1
alter table t1 add 
 c2 int not null default 2
--update t1 set c2=2
2. Si agregar las columnas no requiere modificar las filas (ADD column_name1, column_name2) la operación será inmediata y la ventaja no tan evidente, pero teniendo en cuenta que un ALTER TABLE hace un lock sobre la tabla, es de sentido común agregar las dos columnas con un solo lock que hacer un lock por cada columna.

Saludos
  #4 (permalink)  
Antiguo 17/02/2012, 06:44
 
Fecha de Ingreso: marzo-2007
Mensajes: 39
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Duda optimizacion sentencias sql

Muchas gracias, lo he probado con begin work;
rollback work; y efectivamente la diferencia de tiempos es considerable.
Con 2 sentencias casi 5 minutos con una sola sentencia 2"40

Etiquetas: registro, sentencias, sql, tabla, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:14.