Please comentarios | SQL Server Performance Forums

SQL Server Performance Forum – Threads Archive

Please comentarios

Buenas, gracias por leer este post, mi consulta es que tan efectivo es hacer consultas de este tipo, lo he pasado por el optimizador de indices y no tengo recomendaciones, porque todos los indices necesarios ya fueron creados, es una buena manera de hacer las cosas? o preferible es separarlos y trabajar por separada la informacion. Mil gracias por sus comentarios. SELECT Tick_fech, TICKETS.cenc_codi, TICKETS.Line_codi,
sum(cant_paqu) Canti, sum(Cant_Paqu * MinProd) TotTiempo, isnull(max(MinAsis),0) MinAsis
FROM TICKETS
inner join (select Esti_codi, Surt_codi, prendes_codi, sum(Tstd) MinProd
from EstiPlantSecu group by Esti_codi, Surt_codi, prendes_codi) Secu
on Secu.esti_codi = tickets.Esti_codi and secu.surt_codi = tickets.surt_codi and secu.prendes_codi = tickets.prendes_codi
left join (select Asis.Fecha, Asig.Cenc_codi, Asig.Line_codi, sum(MinLabo + MinExtr – MinFalta) MinAsis from AsignacionLinea Asig
inner join AsistenciaObrero Asis on Asis.Obre_codi = Asig.Obre_codi and Asis.Fecha = Asig.Fecha group by Asis.Fecha, Asig.Cenc_codi, Asig.Line_codi) TabAsis
on TabAsis.Fecha = Tickets.Tick_fech and TabAsis.Cenc_codi = Tickets.Cenc_codi and TabAsis.Line_codi = tickets.Line_codi
WHERE TICK_FECH = ’24/05/05′
AND TICK_LEID = 1 and Oper_codi = 1 and bloq_codi = 2 and fami_codi = 1
group by tick_fech, TICKETS.Line_codi, TICKETS.cenc_codi, MinProd
Esperemos a los expertos.
Luis Martin
Moderator
SQL-Server-Performance.com One of the symptoms of an approaching nervous breakdown is the belief that one’s work is terribly important
Bertrand Russell
All postings are provided “AS IS” with no warranties for accuracy.
De parte tuya que comentario podria obtener, eres una persona de mas experiencia de la que yo tengo, lo mismo que Maldon y otras personas que no recuerdo pero si lei sus respuestas a otros compañeros de este foro, mi logica o como yo pienso que funciona es que los select inferiores son ejecutados de manera a parte y luego se lleva a cabo el inner join, con la tabla superior, gracias.
Lo que tu dices es cierto, la idea de esperar a algún experto programador es que, quizás, se pueda escribir el código en forma más eficiente. Luis Martin
Moderator
SQL-Server-Performance.com One of the symptoms of an approaching nervous breakdown is the belief that one’s work is terribly important
Bertrand Russell
All postings are provided “AS IS” with no warranties for accuracy.
Hola, En principio una de las optimizaciones que haría es que si filtras los subselects por la misma fecha que vas a filtrar la tabla TICKETS, te ahorraras un monton de tiempo al evitar que se hagan cálculos que luego no vas a filtrar por ejemplo: SELECT Tick_fech
, TICKETS.cenc_codi
, TICKETS.Line_codi
, sum(cant_paqu) Canti
, sum(Cant_Paqu * MinProd) TotTiempo
, isnull(max(MinAsis),0) MinAsis
FROM TICKETS
inner join (select Esti_codi, Surt_codi, prendes_codi, sum(Tstd) MinProd
from EstiPlantSecu
group by Esti_codi, Surt_codi, prendes_codi) Secu
on Secu.esti_codi = tickets.Esti_codi
and secu.surt_codi = tickets.surt_codi
and secu.prendes_codi = tickets.prendes_codi
left join (select Asig.Cenc_codi, Asig.Line_codi,
sum(MinLabo + MinExtr – MinFalta) MinAsis
from AsignacionLinea Asig
inner join AsistenciaObrero Asis
on Asis.Obre_codi = Asig.Obre_codi
and Asis.Fecha = Asig.Fecha
WHERE Asig.Fecha = ’24/05/05′
group by Asig.Cenc_codi, Asig.Line_codi) TabAsis
on TabAsis.Cenc_codi = Tickets.Cenc_codi
and TabAsis.Line_codi = tickets.Line_codi
WHERE TICK_FECH = ’24/05/05′
AND TICK_LEID = 1
and Oper_codi = 1
and bloq_codi = 2
and fami_codi = 1
group by tick_fech, TICKETS.Line_codi, TICKETS.cenc_codi, MinProd

Yo prefiero separarlo en tablas temporarias, por que les puedo poner indices y tengo más control sobre la performance. Por otro lado el código me resulta más claro cuando lo tengo que modificar muchos meses después. No es que no utilice selects en la clausula FROM, pero en consultas son funciones agregadas prefiero tablas temporarias. Para conjuntos chicos me resulta bien, declarar variables tipo tabla. Que se comportan como tablas temporarias pero utilizan menos recursos del sistema. Siempre les declaro PRIMARY KEY. Saludos
]]>