lentitud en hacer un insert into

09/11/2004 - 12:08 por reo | Informe spam
desde una tabla temporal donde tengo unos datos estoy tratando de
insertarlos en la tabla definitiva
mediante insert into,es decir

insert into tabla_definitiva(campo1,campo2,campo3,...,campo20) select * from
#tabla_temporal

bueno , pues esto que parece simple se me va a mas de 3 minutos.

lo he puesto con cursores , es decir
declare rst cursor for select * from #tabla_temporal
open rst
fetch next into rst @campo1,@campo2,...,@campo20
while
BEGIN
insert into insert into
tabla_definitiva(campo1,campo2,campo3,...,campo20) values
(@campo1,@campo2,...,@campo20)
fetch next into rst @campo1,@campo2,...,@campo20
END
close rst
deallocate rst

y me tarda 1 minuto 20 segundos.

notas:
la sentencia sql no me da errores, simplemente tarda mucho.
tengo 4 triggers en la tabla tabla_definitiva
tengo bastantes claves ajenas de la tabla_definitiva a otras tablas
tengo 438000 registros en la tabla definitiva
tengo 4 registros en la tabla tabla_temporal

¿como puedo hacer para que tarde menos?

muchas gracias

Preguntas similare

Leer las respuestas

#1 Maxi
09/11/2004 - 14:39 | Informe spam
Hola, es muy extraño!! sobre todo que con un cursor tarde menos.

Habria que ver la carga de trabajo del servidor y quizas tema indices,
porque esto puede afectar considerablemente!!

Tambien yo revisaria los Trigger, no vaya a ser cosa que esten pensados para
trabajar con registros de a uno y no con un conjunto de regitros, entonces
cuando mandas el cursor funciona y cuando mandas el paquete lo haces colgar.


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"reo" escribió en el mensaje
news:%
desde una tabla temporal donde tengo unos datos estoy tratando de
insertarlos en la tabla definitiva
mediante insert into,es decir

insert into tabla_definitiva(campo1,campo2,campo3,...,campo20) select *
from
#tabla_temporal

bueno , pues esto que parece simple se me va a mas de 3 minutos.

lo he puesto con cursores , es decir
declare rst cursor for select * from #tabla_temporal
open rst
fetch next into rst @campo1,@campo2,...,@campo20
while
BEGIN
insert into insert into
tabla_definitiva(campo1,campo2,campo3,...,campo20) values
(@campo1,@campo2,...,@campo20)
fetch next into rst @campo1,@campo2,...,@campo20
END
close rst
deallocate rst

y me tarda 1 minuto 20 segundos.

notas:
la sentencia sql no me da errores, simplemente tarda mucho.
tengo 4 triggers en la tabla tabla_definitiva
tengo bastantes claves ajenas de la tabla_definitiva a otras tablas
tengo 438000 registros en la tabla definitiva
tengo 4 registros en la tabla tabla_temporal

¿como puedo hacer para que tarde menos?

muchas gracias







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.788 / Virus Database: 533 - Release Date: 02/11/2004
Respuesta Responder a este mensaje
#2 reo
09/11/2004 - 17:28 | Informe spam
los trigers estan hechos con cursores, no se si para ejecutar uno a uno o
masivamente.
pero me da igual si yo borro todos los trigers me tarda exactamente igual.


"Maxi" escribió en el mensaje
news:%
Hola, es muy extraño!! sobre todo que con un cursor tarde menos.

Habria que ver la carga de trabajo del servidor y quizas tema indices,
porque esto puede afectar considerablemente!!

Tambien yo revisaria los Trigger, no vaya a ser cosa que esten pensados


para
trabajar con registros de a uno y no con un conjunto de regitros, entonces
cuando mandas el cursor funciona y cuando mandas el paquete lo haces


colgar.


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"reo" escribió en el mensaje
news:%
> desde una tabla temporal donde tengo unos datos estoy tratando de
> insertarlos en la tabla definitiva
> mediante insert into,es decir
>
> insert into tabla_definitiva(campo1,campo2,campo3,...,campo20) select *
> from
> #tabla_temporal
>
> bueno , pues esto que parece simple se me va a mas de 3 minutos.
>
> lo he puesto con cursores , es decir
> declare rst cursor for select * from #tabla_temporal
> open rst
> fetch next into rst @campo1,@campo2,...,@campo20
> while
> BEGIN
> insert into insert into
> tabla_definitiva(campo1,campo2,campo3,...,campo20) values
> (@campo1,@campo2,...,@campo20)
> fetch next into rst @campo1,@campo2,...,@campo20
> END
> close rst
> deallocate rst
>
> y me tarda 1 minuto 20 segundos.
>
> notas:
> la sentencia sql no me da errores, simplemente tarda mucho.
> tengo 4 triggers en la tabla tabla_definitiva
> tengo bastantes claves ajenas de la tabla_definitiva a otras tablas
> tengo 438000 registros en la tabla definitiva
> tengo 4 registros en la tabla tabla_temporal
>
> ¿como puedo hacer para que tarde menos?
>
> muchas gracias
>
>



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.788 / Virus Database: 533 - Release Date: 02/11/2004


Respuesta Responder a este mensaje
#3 Maxi
09/11/2004 - 18:24 | Informe spam
mm, ademas de indicarte que el uso de cursores es una muy mala idea :(, hace
una cosa

Inserta de a uno los registros a ver que pasa


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"reo" escribió en el mensaje
news:
los trigers estan hechos con cursores, no se si para ejecutar uno a uno o
masivamente.
pero me da igual si yo borro todos los trigers me tarda exactamente igual.


"Maxi" escribió en el mensaje
news:%
Hola, es muy extraño!! sobre todo que con un cursor tarde menos.

Habria que ver la carga de trabajo del servidor y quizas tema indices,
porque esto puede afectar considerablemente!!

Tambien yo revisaria los Trigger, no vaya a ser cosa que esten pensados


para
trabajar con registros de a uno y no con un conjunto de regitros,
entonces
cuando mandas el cursor funciona y cuando mandas el paquete lo haces


colgar.


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"reo" escribió en el mensaje
news:%
> desde una tabla temporal donde tengo unos datos estoy tratando de
> insertarlos en la tabla definitiva
> mediante insert into,es decir
>
> insert into tabla_definitiva(campo1,campo2,campo3,...,campo20) select *
> from
> #tabla_temporal
>
> bueno , pues esto que parece simple se me va a mas de 3 minutos.
>
> lo he puesto con cursores , es decir
> declare rst cursor for select * from #tabla_temporal
> open rst
> fetch next into rst @campo1,@campo2,...,@campo20
> while
> BEGIN
> insert into insert into
> tabla_definitiva(campo1,campo2,campo3,...,campo20) values
> (@campo1,@campo2,...,@campo20)
> fetch next into rst @campo1,@campo2,...,@campo20
> END
> close rst
> deallocate rst
>
> y me tarda 1 minuto 20 segundos.
>
> notas:
> la sentencia sql no me da errores, simplemente tarda mucho.
> tengo 4 triggers en la tabla tabla_definitiva
> tengo bastantes claves ajenas de la tabla_definitiva a otras tablas
> tengo 438000 registros en la tabla definitiva
> tengo 4 registros en la tabla tabla_temporal
>
> ¿como puedo hacer para que tarde menos?
>
> muchas gracias
>
>



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.788 / Virus Database: 533 - Release Date: 02/11/2004











Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.788 / Virus Database: 533 - Release Date: 01/11/2004
Respuesta Responder a este mensaje
#4 ancor68
24/10/2012 - 18:46 | Informe spam
reo escribió el 09/11/2004 12:08 :
desde una tabla temporal donde tengo unos datos estoy tratando de
insertarlos en la tabla definitiva
mediante insert into,es decir

insert into tabla_definitiva(campo1,campo2,campo3,...,campo20) select * from
#tabla_temporal

bueno , pues esto que parece simple se me va a mas de 3 minutos.

lo he puesto con cursores , es decir
declare rst cursor for select * from #tabla_temporal
open rst
fetch next into rst @campo1,@campo2,...,@campo20
while
BEGIN
insert into insert into
tabla_definitiva(campo1,campo2,campo3,...,campo20) values
(@campo1,@campo2,...,@campo20)
fetch next into rst @campo1,@campo2,...,@campo20
END
close rst
deallocate rst

y me tarda 1 minuto 20 segundos.

notas:
la sentencia sql no me da errores, simplemente tarda mucho.
tengo 4 triggers en la tabla tabla_definitiva
tengo bastantes claves ajenas de la tabla_definitiva a otras tablas
tengo 438000 registros en la tabla definitiva
tengo 4 registros en la tabla tabla_temporal

¿como puedo hacer para que tarde menos?

muchas gracias


No debería tardar en ningún caso a no ser que esa tabla tenga muchos idx definidos...
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida