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

Mejorar velocidad de insert

Estas en el tema de Mejorar velocidad de insert en el foro de SQL Server en Foros del Web. Hola buenas, ejecuto un Sp para introducir datos en una tabla, pero se demora demasiado, para 300 registros 2 minutos. Hay alguna forma de mejorar ...
  #1 (permalink)  
Antiguo 24/02/2010, 10:08
 
Fecha de Ingreso: junio-2002
Mensajes: 93
Antigüedad: 21 años, 10 meses
Puntos: 0
Mejorar velocidad de insert

Hola buenas, ejecuto un Sp para introducir datos en una tabla, pero se demora demasiado, para 300 registros 2 minutos.

Hay alguna forma de mejorar esto?

Un saludo
Y gracias
  #2 (permalink)  
Antiguo 24/02/2010, 10:21
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Mejorar velocidad de insert

Pues es muy poca la informacion que das, un procedmiento que inserta 300 registros, ¿de que forma?
  #3 (permalink)  
Antiguo 24/02/2010, 11:54
 
Fecha de Ingreso: junio-2002
Mensajes: 93
Antigüedad: 21 años, 10 meses
Puntos: 0
Respuesta: Mejorar velocidad de insert

Perdonar por lo escueto del mensaje
El procedimiento crea un cursor y para cada registro efectua el insert y update
Os pongo parte del codigo.
Código PHP:
declare mirs cursor for                            
SELECT campo1,  campo2campo3 FROM articulos ORDER BY NEWID()
Open mirs
Fetch next from mirs into 
@var1, @var2, @var3
    
while @@fetch_status 0
                                begin
        Insert into tabla
(var1,var2var3values (@var1,@var2,@var3)
        
Update tabla set campox= (campox-1where id = @var2
        Fetch next from mirs into 
@var1, @var2, @var3
                                    end
close mirs
Deallocate mirs 
Un saludo
y gracias
  #4 (permalink)  
Antiguo 24/02/2010, 16:40
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Mejorar velocidad de insert

Con el permiso de Isaias.
kaki prueba asi:
Código SQL:
Ver original
  1. INSERT INTO tabla(var1,var2, var3)
  2. SELECT campo1, campo2, campo3 FROM articulos ORDER BY NEWID()
  3.  
  4. UPDATE tabla SET campox = campox - T2.N
  5. FROM tabla T1
  6. INNER JOIN (
  7.     SELECT campo2, COUNT(1) N FROM articulos GROUP BY campo2
  8. ) T2 ON T1.id = T2.campo2
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #5 (permalink)  
Antiguo 25/02/2010, 08:52
 
Fecha de Ingreso: junio-2002
Mensajes: 93
Antigüedad: 21 años, 10 meses
Puntos: 0
Respuesta: Mejorar velocidad de insert

Muchas grascias por la respuesta flaviovich.
Yo tambien creo que sería bueno eliminar el cursor, sin duda.

Solo que no encuentro la forma.
Tengo un conjuto de resultados (id_articulo,id_cliente) que es lo que paso al cursor
Despues lo recorro y voy haciendo Un insert y un update.

Alguien tiene una idea de como solucionarlo.
  #6 (permalink)  
Antiguo 25/02/2010, 08:59
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Mejorar velocidad de insert

¿Has probado el código que te pasé?
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #7 (permalink)  
Antiguo 25/02/2010, 09:39
 
Fecha de Ingreso: junio-2002
Mensajes: 93
Antigüedad: 21 años, 10 meses
Puntos: 0
Respuesta: Mejorar velocidad de insert

Perdona flaviovich, pero no lo probé porque no lo entiendo y no puedo adaptarlo a mis consultas.

Si me lo explicas tal vez pueda ....

Un saludo y
Gracias
  #8 (permalink)  
Antiguo 25/02/2010, 10:01
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Mejorar velocidad de insert

kaki, ¿que tanta experiencia tienes en T-SQL?, el codigo de Flaviovich es por demas excelente y facil de interpretar.
  #9 (permalink)  
Antiguo 25/02/2010, 10:12
 
Fecha de Ingreso: junio-2002
Mensajes: 93
Antigüedad: 21 años, 10 meses
Puntos: 0
Respuesta: Mejorar velocidad de insert

No me cabe la más mínima duda de que así sea, sin embargo como no lo entiendo y tengo dudas pues pregunto.

No sé como adaptar la solucion que me da flaviovich a mi codigo.
  #10 (permalink)  
Antiguo 25/02/2010, 10:16
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Mejorar velocidad de insert

Ni modo, habrá que ir paso a paso.
A ver, a qué campo de tu tabla articulos corresponde campo2?
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #11 (permalink)  
Antiguo 25/02/2010, 10:29
 
Fecha de Ingreso: junio-2002
Mensajes: 93
Antigüedad: 21 años, 10 meses
Puntos: 0
Respuesta: Mejorar velocidad de insert

Ok flaviovich te pego todo el codigo sin tocar y te explico lo que hace el sp
Código SQL:
Ver original
  1. DECLARE rs cursor FOR
  2. SELECT chips ,  Id_cliente , Id FROM jockerschips  WHERE id_articulo=@elid AND inicio<=@importe AND chips>0 AND id_cliente=@ganador
  3. OPEN rs
  4. Fetch NEXT FROM rs INTO @chipspendientes, @chipscliente, @chipsID
  5.     while @@fetch_status = 0
  6.         BEGIN
  7.    
  8.             SET @importe = @importe+0.01
  9.             INSERT INTO pujado(id_articulo,id_cliente, fecha, importe, tipo, id_jock) VALUES (@elid,@chipscliente, getdate(),@importe,1,@chipsID)
  10.             UPDATE jockerschips SET chips = (chips-1) WHERE id = @chipsID
  11.             Fetch NEXT FROM rs INTO @chipspendientes, @chipscliente, @chipsID
  12.         END
  13. close rs
  14. Deallocate rs
Para que os hagais una idea lo que hago es seleccionar unas filas que deben cumplir unas condiciones y pasarlas al cursor.
Despues hago un insert en una tabla y actualizo otra.
Como peculariadad en la tabla pujado al hacer los inserts el importe se incrementa en 0.01 para cada insert.

Espero que ahora se me netienda mejor.
Un saludo y
Gracias

Etiquetas: insert, velocidad, mejoras
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 23:04.