Select con tiempos de respuesta distintos?

16/04/2008 - 21:46 por Josè Luis Carranza | Informe spam
hola buenas tardes, tengo la siguiente inquietud:

Primer Ejemplo tarda 8Segundos en traer un solo registro :

select a.Cdlocal,a.CdAlmacen,a.CdArticulo,sum(Case When a.FlgUnds=1 Then
a.Cantidad Else a.Cantidad*a.Multiplo end) as Cant_Vtas

from Ventad_Unida a inner Join Stock_Unido d

on a.Cdlocal=d.Cdlocal and a.cdAlmacen=d.CdAlmacen and
a.cdarticulo=d.CdArticulo

inner join Auxiliarpt b

on a.CdLaboratorio= b.Codigo and b.cdlocal='XXX'

inner join auxiliarpt6 c

on a.Cdlocal= c.codigo1 and a.cdalmacen=c.codigo2 and c.cdlocal='XXX'

where convert(char(10),a.FecDocumento,112)>=convert(char(10),DATEADD(DAY, -
d.NDias_Stock_Max,'20080416'),112)

and convert(char(10),a.FecDocumento,112)<'20080416'

Group by a.Cdlocal,a.CdAlmacen,a.CdArticulo





Segundo Ejemplo tarda 2Segundos en traer un solo registro, la diferencia es
que pongo el valor 30 en lugar de d.NDias_Stock_Max :



select a.Cdlocal,a.CdAlmacen,a.CdArticulo,sum(Case When a.FlgUnds=1 Then
a.Cantidad Else a.Cantidad*a.Multiplo end) as Cant_Vtas

from Ventad_Unida a inner Join Stock_Unido d

on a.Cdlocal=d.Cdlocal and a.cdAlmacen=d.CdAlmacen and
a.cdarticulo=d.CdArticulo

inner join Auxiliarpt b

on a.CdLaboratorio= b.Codigo and b.cdlocal='XXX'

inner join auxiliarpt6 c

on a.Cdlocal= c.codigo1 and a.cdalmacen=c.codigo2 and c.cdlocal='XXX'

where
convert(char(10),a.FecDocumento,112)>=convert(char(10),DATEADD(DAY, -30,'20080416'),112)

and convert(char(10),a.FecDocumento,112)<'20080416'

Group by a.Cdlocal,a.CdAlmacen,a.CdArticulo



Como ven hacen casi lo mismo, la unica diferencia es que en el ultimo select
pongo el valor 30 en lugar de obtenerlo del campo d.NDias_Stock_Max, hay
algo que estoy haciendo mal?

Porfavor agradecere sus comentarios gracias.

Nota:

Trabajo con SQL 2005 SP2

Ventad_Unida es una vista con 486,000 registros

Stock_Unido es una vista con 271,800 registros

Auxiliarpt es una tabla con datos de laboratorio seleccionados

auxiliarpt6 es una tabla con datos de local y almacen seleccionados

Preguntas similare

Leer las respuestas

#1 Gux (MVP)
16/04/2008 - 22:07 | Informe spam
Ninguna sopresa. Siempre es más rápido obtener un valor constante que
cualquier otro tipo de expresión.

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/profile/gux
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Josè Luis Carranza" wrote:

hola buenas tardes, tengo la siguiente inquietud:

Primer Ejemplo tarda 8Segundos en traer un solo registro :

select a.Cdlocal,a.CdAlmacen,a.CdArticulo,sum(Case When a.FlgUnds=1 Then
a.Cantidad Else a.Cantidad*a.Multiplo end) as Cant_Vtas

from Ventad_Unida a inner Join Stock_Unido d

on a.Cdlocal=d.Cdlocal and a.cdAlmacen=d.CdAlmacen and
a.cdarticulo=d.CdArticulo

inner join Auxiliarpt b

on a.CdLaboratorio= b.Codigo and b.cdlocal='XXX'

inner join auxiliarpt6 c

on a.Cdlocal= c.codigo1 and a.cdalmacen=c.codigo2 and c.cdlocal='XXX'

where convert(char(10),a.FecDocumento,112)>=convert(char(10),DATEADD(DAY, -
d.NDias_Stock_Max,'20080416'),112)

and convert(char(10),a.FecDocumento,112)<'20080416'

Group by a.Cdlocal,a.CdAlmacen,a.CdArticulo





Segundo Ejemplo tarda 2Segundos en traer un solo registro, la diferencia es
que pongo el valor 30 en lugar de d.NDias_Stock_Max :



select a.Cdlocal,a.CdAlmacen,a.CdArticulo,sum(Case When a.FlgUnds=1 Then
a.Cantidad Else a.Cantidad*a.Multiplo end) as Cant_Vtas

from Ventad_Unida a inner Join Stock_Unido d

on a.Cdlocal=d.Cdlocal and a.cdAlmacen=d.CdAlmacen and
a.cdarticulo=d.CdArticulo

inner join Auxiliarpt b

on a.CdLaboratorio= b.Codigo and b.cdlocal='XXX'

inner join auxiliarpt6 c

on a.Cdlocal= c.codigo1 and a.cdalmacen=c.codigo2 and c.cdlocal='XXX'

where
convert(char(10),a.FecDocumento,112)>=convert(char(10),DATEADD(DAY, -30,'20080416'),112)

and convert(char(10),a.FecDocumento,112)<'20080416'

Group by a.Cdlocal,a.CdAlmacen,a.CdArticulo



Como ven hacen casi lo mismo, la unica diferencia es que en el ultimo select
pongo el valor 30 en lugar de obtenerlo del campo d.NDias_Stock_Max, hay
algo que estoy haciendo mal?

Porfavor agradecere sus comentarios gracias.

Nota:

Trabajo con SQL 2005 SP2

Ventad_Unida es una vista con 486,000 registros

Stock_Unido es una vista con 271,800 registros

Auxiliarpt es una tabla con datos de laboratorio seleccionados

auxiliarpt6 es una tabla con datos de local y almacen seleccionados





Respuesta Responder a este mensaje
#2 Jorge
16/04/2008 - 22:24 | Informe spam
Por que no ejecutas las 2 consultas con el plan de ejecucion?
eso te dara una mayor idea del pq tarda tanto.
para terminar 2 cosas
creo que no es necesario que convieras a char10 con char 8 es suficiente
(creo yo)
podrias crear un index de tipo char(8) con las fechas quizas eso ayude en el
tiempo de respuesta.



"Josè Luis Carranza" wrote in message
news:usczyo$
hola buenas tardes, tengo la siguiente inquietud:

Primer Ejemplo tarda 8Segundos en traer un solo registro :

select a.Cdlocal,a.CdAlmacen,a.CdArticulo,sum(Case When a.FlgUnds=1 Then
a.Cantidad Else a.Cantidad*a.Multiplo end) as Cant_Vtas

from Ventad_Unida a inner Join Stock_Unido d

on a.Cdlocal=d.Cdlocal and a.cdAlmacen=d.CdAlmacen and
a.cdarticulo=d.CdArticulo

inner join Auxiliarpt b

on a.CdLaboratorio= b.Codigo and b.cdlocal='XXX'

inner join auxiliarpt6 c

on a.Cdlocal= c.codigo1 and a.cdalmacen=c.codigo2 and c.cdlocal='XXX'

where
convert(char(10),a.FecDocumento,112)>=convert(char(10),DATEADD(DAY, -
d.NDias_Stock_Max,'20080416'),112)

and convert(char(10),a.FecDocumento,112)<'20080416'

Group by a.Cdlocal,a.CdAlmacen,a.CdArticulo





Segundo Ejemplo tarda 2Segundos en traer un solo registro, la diferencia
es que pongo el valor 30 en lugar de d.NDias_Stock_Max :



select a.Cdlocal,a.CdAlmacen,a.CdArticulo,sum(Case When a.FlgUnds=1 Then
a.Cantidad Else a.Cantidad*a.Multiplo end) as Cant_Vtas

from Ventad_Unida a inner Join Stock_Unido d

on a.Cdlocal=d.Cdlocal and a.cdAlmacen=d.CdAlmacen and
a.cdarticulo=d.CdArticulo

inner join Auxiliarpt b

on a.CdLaboratorio= b.Codigo and b.cdlocal='XXX'

inner join auxiliarpt6 c

on a.Cdlocal= c.codigo1 and a.cdalmacen=c.codigo2 and c.cdlocal='XXX'

where
convert(char(10),a.FecDocumento,112)>=convert(char(10),DATEADD(DAY, -30,'20080416'),112)

and convert(char(10),a.FecDocumento,112)<'20080416'

Group by a.Cdlocal,a.CdAlmacen,a.CdArticulo



Como ven hacen casi lo mismo, la unica diferencia es que en el ultimo
select pongo el valor 30 en lugar de obtenerlo del campo
d.NDias_Stock_Max, hay algo que estoy haciendo mal?

Porfavor agradecere sus comentarios gracias.

Nota:

Trabajo con SQL 2005 SP2

Ventad_Unida es una vista con 486,000 registros

Stock_Unido es una vista con 271,800 registros

Auxiliarpt es una tabla con datos de laboratorio seleccionados

auxiliarpt6 es una tabla con datos de local y almacen seleccionados




Respuesta Responder a este mensaje
#3 Josè Luis Carranza
16/04/2008 - 23:56 | Informe spam
Gracias por responder y aclarar la duda que tenia.

Saludos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida