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

Optimizar Consulta

Estas en el tema de Optimizar Consulta en el foro de SQL Server en Foros del Web. Hola amigos Foros web , tengo esta consulta la cual funciona pero demora demasiado en darme el resultado necesito optimnizarla. gracias de antemano Código: select ...
  #1 (permalink)  
Antiguo 15/06/2011, 09:31
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 96
Antigüedad: 14 años
Puntos: 2
Optimizar Consulta

Hola amigos Foros web , tengo esta consulta la cual funciona pero demora demasiado en darme el resultado necesito optimnizarla. gracias de antemano

Código:
select  Id_Per into #QU from M_PERSONAL where IdCp= 820

select  SUM(M_Sueldo) as Total,
		SUM((case when R.M_Sueldo = 0 then R.M_Sueldo+R.N_Bonif else 0 end)) as Deuda
		from M_PAGOS R inner join #QU A on A.Id_Per=R.Id_Per
	where  R.IdTram in ('02.01','11.00','11.04') and 
		   R.F_Año between '1997' and '2010'
   
 drop table #QU
M_PERSONAL ---> esta tabla contiene mas de 282978 registros
M_PAGOS ---> esta tabla contiene mas de 18257342 registros
  #2 (permalink)  
Antiguo 15/06/2011, 09:40
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: Optimizar Consulta

Cada cuanto usas esta consulta? es muy seguido? si es asi te conviene cambiar la tabla temporal por una tabla normal e indexar esta, que indices tienes en tus tablas, ya viste el plan de ejecucion de tu consulta (ctrl+L en sql server)???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 15/06/2011, 09:48
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Optimizar Consulta

Hola Erick21:

Creo que el problema está en que al generar una tabla temporal no estás especificando ninguna llave ni indice. ¿por qué no hacer el inner join directamente con la tabla? ¿hay alguna razón en especial para hacerlo de esta manera?.

Yo trataría de hacer lo siguiente:

Código SQL:
Ver original
  1. SELECT  
  2. SUM(M_Sueldo) AS Total,
  3. SUM(CASE WHEN R.M_Sueldo = 0 THEN R.M_Sueldo+R.N_Bonif ELSE 0 END) AS Deuda
  4. FROM M_PAGOS R INNER JOIN
  5. M_PERSONAL P ON P.Id_Per=R.Id_Per
  6. WHERE
  7. R.IdTram IN ('02.01','11.00','11.04') AND
  8. R.F_Año BETWEEN '1997' AND '2010' AND
  9. p.IdCp = 820

o también esto debería funcionar...

Código SQL:
Ver original
  1. SELECT  
  2. SUM(M_Sueldo) AS Total,
  3. SUM(CASE WHEN R.M_Sueldo = 0 THEN R.M_Sueldo+R.N_Bonif ELSE 0 END) AS Deuda
  4. FROM M_PAGOS R INNER JOIN
  5. M_PERSONAL P ON P.Id_Per=R.Id_Per AND p.IdCp = 820
  6. WHERE
  7. R.IdTram IN ('02.01','11.00','11.04') AND
  8. R.F_Año BETWEEN '1997' AND '2010'

Revisa también el Plan de Ejecución de la consulta desde el Management Studio, para ver el diagnóstico que te da.

EDITADO: básicamente es la misma respuesta que te da el compañero Libra, solo que 8 minutos más tarde, jejeje. saludos

Saludos
Leo.
  #4 (permalink)  
Antiguo 15/06/2011, 09:56
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 96
Antigüedad: 14 años
Puntos: 2
Respuesta: Optimizar Consulta

Hola gracias por responder , bueno esta consulta la necesito para un reporte y bueno es solo para esta ocacion, pero el query va quedar guardado para ser usardo en otra ocacion ya que pueden variar los años o el centro de trabajo que es la condicion principal "IdCp".

el select into que estoy haciendo ahi es solo para optener a todos los trabajadores de un solo centro de trabajo y deacuerdo a ello consultar su sueldo y deuda dependiendo entre los años que halla ingresado y los tramites que hallan realizados "idTram". la idea de crear otra tabla creo que no seria necesaria.
  #5 (permalink)  
Antiguo 15/06/2011, 10:07
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 96
Antigüedad: 14 años
Puntos: 2
Respuesta: Optimizar Consulta

Hola Leonardo , gracias por responder

esas consultas que me planteas demoran mucho mas que el que plantee al comienzo, bueno de todas maneras revisare el plan de ejecucion gracias si tienen otra ayuda por favor brindenmela gracias .
  #6 (permalink)  
Antiguo 15/06/2011, 10:19
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: Optimizar Consulta

Como opinion personal, y ya comentado por los compañeros, revisa tus INDICES, compara tu plan de ejecucion vs estos.
__________________
MCTS Isaias Islas
  #7 (permalink)  
Antiguo 15/06/2011, 11:06
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 96
Antigüedad: 14 años
Puntos: 2
Respuesta: Optimizar Consulta

Hola , bueno haciendo la comparacion de consultas planteadas aca y la mia , la unica diferencia es los indices conparativos el cual toma 1 a 2 % de los recursos de la consulta de ahi los demas es similar. creo que la tabla temporal seria la mejor opcion y el problema seria el filtro que hago a estos dos campos Idtram y F_Año utilizando el "IN " Y "BETWEEN " ya que en la tabla M_PAGOS son mas de 18 millones de registros y es aqui donde se demora mucho.

si puediera optimizar esta parte de la consulta creo que seria mas rapida , tal vez con una funcion ? , bueno esperare cualquier sugerencia o ayuda gracias.
  #8 (permalink)  
Antiguo 15/06/2011, 13:47
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 96
Antigüedad: 14 años
Puntos: 2
Respuesta: Optimizar Consulta

alguna ayuda ??
  #9 (permalink)  
Antiguo 15/06/2011, 14:03
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: Optimizar Consulta

ya probaste con los query hint? usando un loop join o un merge join o cosas asi??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 15/06/2011, 14:48
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 96
Antigüedad: 14 años
Puntos: 2
Respuesta: Optimizar Consulta

holas , gracias por responder , probe los tres LEFT OUTER HASH JOIN, INNER LOOP JOIN y INNER MERGE JOIN los tres se tardan casi 8 a 10 min en dar respuesta , seguire buscando otro metodo gracias.
  #11 (permalink)  
Antiguo 20/06/2011, 14:04
 
Fecha de Ingreso: junio-2011
Ubicación: Lima Peru
Mensajes: 13
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Optimizar Consulta

Bueno sugiriria que pruebes en ves de armar la temporal ahi crees una vista indexada... lo que en oracle se iama vista materializada son como pseudotablas pero creo q peude ayudarte...
veo que no es una consult amuy complicada que digamos

Etiquetas: Ninguno
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 14:17.