Hola amigos
Tengo una gran duda, tengo un query que cuando lo corro en el
analizador de consultas demora un promedio de 20 segundos, pero al
incoporarlo a un store y ejecutarlo se demora el increible tiempo de 3
horas!!!!!
Hay alguien al que le haya sucedido algo similar? es problema del Sql
Server? una configuración? hardware? Service Pack? Tengo Sql Server
2000, el query es el siguiente:
select r.reg_nom Region,
m.cal_fecha Fecha,
rm.reg_meta_siccsa MetaSiccsa,
rm.reg_meta_fedex MetaFedex,
sum( case
when isnull(gd.guia_det_nro, '') <> '' then 1
else 0
end) Guia,
sum( case
when isnull(gd.guia_det_nro, '') <> '' then
gd.guia_det_pqt_nro - 1
else 0
end) MPS,
sum( case
when isnull(gd.guia_det_nro, '') <> '' then
gd.guia_det_pqt_peso
else 0
end) Peso
from region r
inner join region_meta rm
on rm.reg_cod = r.reg_cod
inner join ciudad c
on r.reg_cod = c.reg_cod
inner join calendario m
on rm.reg_ano = year(m.cal_fecha) and
rm.reg_mes = month(m.cal_fecha)
left outer join
(select gd.empr_cod, gd.suc_cod, gd.uni_neg_cod, gd.pro_cod,
gd.guia_ano, gd.guia_nro, gd.guia_det_nro,
case when gd.pro_cod = 'OUT' then substring(g.guia_ori, 4,3) else
substring(gd.guia_det_dst, 4,3) end ciudad,
case when gd.pro_cod = 'OUT' then gd.guia_det_fch_emi
else cast(convert(char(10), gd.guia_det_fch_reg, 103) as datetime) end
fecha,
gd.guia_det_pqt_nro, gd.guia_det_pqt_peso
from guia_courier g
inner join guia_detalle_courier gd
on g.empr_cod = gd.empr_cod and
g.suc_cod = gd.suc_cod and
g.uni_neg_cod = gd.uni_neg_cod and
g.pro_cod = gd.pro_cod and
g.guia_ano = gd.guia_ano and
g.guia_nro = gd.guia_nro
where gd.pro_cod = @pro_cod and
year(case when gd.pro_cod = 'OUT' then
gd.guia_det_fch_emi else cast(convert(char(10), gd.guia_det_fch_reg,
103) as datetime) end) = @anio and
month(case when gd.pro_cod = 'OUT' then
gd.guia_det_fch_emi else cast(convert(char(10), gd.guia_det_fch_reg,
103) as datetime) end) = @mes) gd
on rm.reg_pro = gd.pro_cod and
c.ciu_cod_iata = gd.ciudad and
m.cal_fecha = gd.fecha
where rm.reg_pro = @pro_cod and
rm.reg_ano = @anio and
rm.reg_mes = @mes
group by r.reg_nom, m.cal_fecha, rm.reg_meta_siccsa,
rm.reg_meta_fedex
union
select 'TOTAL PERU' Region,
m.cal_fecha Fecha,
(select sum(rm1.reg_meta_siccsa)
from region_meta rm1
where rm1.reg_pro = @pro_cod and
rm1.reg_ano = @anio and
rm1.reg_mes = @mes) MetaSiccsa,
(select sum(rm1.reg_meta_fedex)
from region_meta rm1
where rm1.reg_pro = @pro_cod and
rm1.reg_ano = @anio and
rm1.reg_mes = @mes) MetaFedex,
sum( case
when isnull(gd.guia_det_nro, '') <> '' then 1
else 0
end) Guia,
sum( case
when isnull(gd.guia_det_nro, '') <> '' then
gd.guia_det_pqt_nro - 1
else 0
end) MPS,
sum( case
when isnull(gd.guia_det_nro, '') <> '' then
gd.guia_det_pqt_peso
else 0
end) Peso
from region r
inner join region_meta rm
on rm.reg_cod = r.reg_cod
inner join ciudad c
on r.reg_cod = c.reg_cod
inner join calendario m
on rm.reg_ano = year(m.cal_fecha) and
rm.reg_mes = month(m.cal_fecha)
left outer join
(select gd.empr_cod, gd.suc_cod, gd.uni_neg_cod, gd.pro_cod,
gd.guia_ano, gd.guia_nro, gd.guia_det_nro,
case when gd.pro_cod = 'OUT' then substring(g.guia_ori, 4,3) else
substring(gd.guia_det_dst, 4,3) end ciudad,
case when gd.pro_cod = 'OUT' then gd.guia_det_fch_emi
else cast(convert(char(10), gd.guia_det_fch_reg, 103) as datetime) end
fecha,
gd.guia_det_pqt_nro, gd.guia_det_pqt_peso
from guia_courier g
inner join guia_detalle_courier gd
on g.empr_cod = gd.empr_cod and
g.suc_cod = gd.suc_cod and
g.uni_neg_cod = gd.uni_neg_cod and
g.pro_cod = gd.pro_cod and
g.guia_ano = gd.guia_ano and
g.guia_nro = gd.guia_nro
where gd.pro_cod = @pro_cod and
year(case when gd.pro_cod = 'OUT' then
gd.guia_det_fch_emi else cast(convert(char(10), gd.guia_det_fch_reg,
103) as datetime) end) = @anio and
month(case when gd.pro_cod = 'OUT' then
gd.guia_det_fch_emi else cast(convert(char(10), gd.guia_det_fch_reg,
103) as datetime) end) = @mes) gd
on rm.reg_pro = gd.pro_cod and
c.ciu_cod_iata = gd.ciudad and
m.cal_fecha = gd.fecha
where rm.reg_pro = @pro_cod and
rm.reg_ano = @anio and
rm.reg_mes = @mes
group by m.cal_fecha
order by Fecha
Se que tal vez la sintaxis no este bien del todo, que se puede hacer
mejoras, agregar indices, etc... pero como les digo mi duda es porque
en el analizador de consultas demora tan poco y porque al meterlo en un
store demora una eternidad.
Si alguien tiene una respuesta le rogaria explicarmela.
Muchas gracias ...
PD .. Por si acaso si se quita el UNION la consulta sigue demorando lo
mismo, es decir no termina de ejecutarse asi solo tenga una de las
partes del UNION
Leer las respuestas