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
 

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





Preguntas similares