¿No es mejor INSERTS en grupo que una a una?

20/02/2007 - 12:18 por Victor | Informe spam
Hola.

he cambiado un SP el cuál, dentro de un WHILE realizaba, en 8 tablas, 1
INSERT en cada una de ellas. El While tiene entre 2 y 4 "ciclos".

Más o menos es así:

insert into ic_billetes
select . from ic_billetes where bil_id = @bil

SELECT @bil_id = (SELECT SCOPE_IDENTITY())

insert into ic_bilper
select . from ic_bilper where bip_bil_id = @bil

y así hasta 8 tablas unas 2 o cuatro veces.

"Brillante" ida mia: me creo unas variables del tipo table, dentro del WHILE
realizao los INSERTS en las tablas temporales y así luego realizo de golpe
los INSERTS. De esta forma los SELECTS de los INSERTS en las tablas buenas
son un poco más complicadas, pero no son mucho más pesadas (lo he mirado con
el plan de ejecución).

El problema que tengo es que tarda más la nueva forma que la anterior (si
eran 4'' ahora son 8'' o 9'').

¿No es, en principio, una buena idea? ¿O no?

Sé que depende los índices y de los SELECTS, pero en principio es mejor
realizar las operaciones en grupo que indidual, ¿no?

Muchas gracias.

Preguntas similare

Leer las respuestas

#6 Gustavo Larriera (MVP)
20/02/2007 - 15:40 | Informe spam
Hola Victor,

"Victor" wrote:
Sé que depende los índices y de los SELECTS, pero en principio es mejor
realizar las operaciones en grupo que indidual, ¿no?



No necesariamente, y depende de lo que hagan las operaciones. No hay una
receta universal.

Un grupo de operaciones puede terminar siendo una transacción activa de más
larga duración. Eso provoca más actividad en el log de transacciones y
consumo de recursos para poder hacer el potencial rollback (el sistema debe
asumir que el rollback va a ser posible).

Saludos
~gux
Respuesta Responder a este mensaje
#7 Victor
20/02/2007 - 16:57 | Informe spam
Muchas gracias a todos.

Si falla una fila, todo se tiene que paras (después de cada INSERT controlo
que el número de filas es el correcto, y si no , ROLLBACK al canto).

"Maxi" escribió en el mensaje
news:%
Y depende lo q busques, si vos queres que si una fila falle no se guarde
todo el lote entonces los conjuntos son mejores, ahora si vos queres
insertar y si fallan detectarlos pero que no se corte todo entonces vas a
tener que hacerlo fila a fila


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Alfredo Novoa" escribió en el mensaje
news:
> On Tue, 20 Feb 2007 09:06:53 -0300, "Maxi"
> wrote:
>
>>pero tambien si haces todo de
>>una y falla una fila fallara todo
>
> Y eso es bueno.
>
> Saludos
>
>
>


Respuesta Responder a este mensaje
#8 Victor
20/02/2007 - 17:09 | Informe spam
Por eso me tarda bastante más ahora que con el formato antiguo.

me imaginaba algo así pues con el antiguo las consultas son a tablas de
1000000 de registros (pero cada INSERT es una consulta a 1 única tabla), y
ahora las consultas son más tabas (y algunas consultas llaman dos veces a
alguna tabla).

Joder, con lo bonito que me había quedado... snif.

Gracias por la ayuda.

"Gustavo Larriera (MVP)" escribió en el mensaje
news:
Hola Victor,

"Victor" wrote:
> Sé que depende los índices y de los SELECTS, pero en principio es mejor
> realizar las operaciones en grupo que indidual, ¿no?

No necesariamente, y depende de lo que hagan las operaciones. No hay una
receta universal.

Un grupo de operaciones puede terminar siendo una transacción activa de


más
larga duración. Eso provoca más actividad en el log de transacciones y
consumo de recursos para poder hacer el potencial rollback (el sistema


debe
asumir que el rollback va a ser posible).

Saludos
~gux

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida