Raro Rendimiento en Consulta en SQL2000

23/12/2005 - 18:39 por Developers | Informe spam
Amigos tengo una Consulta que al poner parametros se demora 30 segundos y
sin parametros se demora 3 segundos
osea:

Tengo esta consulta que se demora 3 a 4 segundos en en traer 11582:
DECLARE @FechaStk char(8)
Set @FechaStk='20051001'

SELECT T3.COD_ITE, T3.FECHA, SUM(T3.ING_ITE-T3.SAL_ITE) AS CANT_DIAR
FROM D_MOVI_ATG T3 WITH (NOLOCK)
WHERE (T3.FECHA>='20051001' AND T3.FECHA<'20051031') AND T3.CDG_ZON='02' AND
SUBSTRING(T3.DOC_REF,1,2) NOT IN ('IK','SK','SD','AT','TA') AND T3.AREA='10'
AND T3.ANU=' ' AND T3.FASN NOT IN ('N')
GROUP BY T3.COD_ITE,T3.FECHA
Union
SELECT T1.COD_ITE, @FechaStk as Fecha, SUM(T1.STK_INI) AS CANT_DIAR
FROM D_INVE_ATG T1 WITH (NOLOCK)
WHERE T1.ANHO='2005' AND T1.CDG_ZON='02' AND T1.AREA='10'
GROUP BY T1.COD_ITE
UNION
SELECT T2.COD_ITE, @FechaStk as Fecha, SUM(T2.ING_ITE-T2.SAL_ITE) AS
CANT_DIAR
FROM D_MOVI_ATG T2 WITH (NOLOCK)
WHERE T2.ANHO='2005' AND T2.CDG_ZON='02' AND SUBSTRING(T2.DOC_REF,1,2) NOT
IN ('IK','SK','SD','AT','TA') AND T2.AREA='10' AND T2.ANU=' ' AND T2.FASN
NOT IN ('N') AND T2.FECHA<'20051001'
GROUP BY T2.COD_ITE

Ahora la Misma Consulta pero en lugar de escribir los valores mando los
parametros declarados:

DECLARE @FECHAINI CHAR(8), @FECHAFIN CHAR(8), @CDG_ZON CHAR(2), @AREA
CHAR(2)
DECLARE @AÑO CHAR(4), @ANU CHAR(1), @FECHASTK DATETIME
SET @FECHAINI = '20051001'
SET @FECHAFIN = '20051031'
SET @CDG_ZON = '02'
SET @AREA = '10'
SET @FECHASTK = CAST(@FECHAINI AS DATETIME)-1
SET @AÑO = CAST(YEAR(@FECHASTK) AS CHAR(4))
SET @ANU = SPACE(1)

SELECT T3.COD_ITE, T3.FECHA, SUM(T3.ING_ITE-T3.SAL_ITE) AS CANT_DIAR
FROM D_MOVI_ATG T3 WITH (NOLOCK)
WHERE (T3.FECHA>=@FECHAINI AND T3.FECHA<@FECHAFIN) AND T3.CDG_ZON=@CDG_ZON
AND SUBSTRING(T3.DOC_REF,1,2) NOT IN ('IK','SK','SD','AT','TA') AND
T3.AREA=@AREA AND T3.ANU=@ANU AND T3.FASN NOT IN ('N')
GROUP BY T3.COD_ITE,T3.FECHA
Union
SELECT T1.COD_ITE, @FechaStk as Fecha, SUM(T1.STK_INI) AS CANT_DIAR
FROM D_INVE_ATG T1 WITH (NOLOCK)
WHERE T1.ANHO=@AÑO AND T1.CDG_ZON=@CDG_ZON AND T1.AREA=@AREA
GROUP BY T1.COD_ITE
UNION
SELECT T2.COD_ITE, @FechaStk as Fecha, SUM(T2.ING_ITE-T2.SAL_ITE) AS
CANT_DIAR
FROM D_MOVI_ATG T2 WITH (NOLOCK)
WHERE T2.ANHO=@AÑO AND T2.CDG_ZON=@CDG_ZON AND SUBSTRING(T2.DOC_REF,1,2) NOT
IN ('IK','SK','SD','AT','TA') AND T2.AREA=@AREA AND T2.ANU=@ANU AND T2.FASN
NOT IN ('N') AND T2.FECHA<@FECHAINI
GROUP BY T2.COD_ITE

Esta Consulta se demora en responder de 30 a 40 segundos en traer 11582 que
es el mismo resultado de la anterior:.

Las pruebas lo estoy haciendo en QA.

Me podrian explicar del porque pasa esto??? se supone que deberia tener el
mismo tiempo de respuesta

Gracias


Dany Acosta

Preguntas similare

Leer las respuestas

#6 Developers
23/12/2005 - 22:49 | Informe spam
y como puedo obtener el Plan Completo ya que el Sqlserver me corta cuando
algunas cadenas(Lineas) del plan son demasiadas largas.

Gracias


"Maxi [MVP]" escribió en el mensaje
news:
Hola, hay casos que un index seek es peor que un index Scan, por ej, si
tiene que partir la consulta. A mi me gustaria ver el plan completo de
ejecucion


Salu2
-
[MVP] SQL Server
Orador para Culminis Latam
www.sqlgurus.org



"Developers" escribió en el mensaje
news:eGjWh0$
> Necesito una Explicacion:
>
> Porque un Index Scan es mas Rapido que un Index Seek, encontre mi


problema
> y
> era esto:
>
> En la Sentencia que Usa Parametros Sqlserver usaba
> Index Seek(OBJECT:([Sekur].[dbo].[D_MOVI_ATG].[D_MOVI_ATG3] AS [T3]),
> SEEK:([T3].[CDG_ZON]=[@CDG_ZON]), WHERE:((((substring([T3].[DOC_REF],


1,
> 2)<'TA' OR substring([T3].[DOC_REF], 1, 2)>'TA') AND (substrin
>
> En la Sentencia que NO Usaba Parametros SqlServer Usaba:
> |--Index Scan(OBJECT:([Sekur].[dbo].[D_MOVI_ATG].[D_MOVI_ATG2] AS [T3]),
> WHERE:((((([T3].[FECHA]>='Oct 1 2005 12:00AM' AND [T3].[FECHA]<'Oct 31
> 2005
> 12:00AM') AND [T3].[CDG_ZON]='02') AND (substring([T3].[DO
>
>
> Borre el Indice D_MOVI_ATG3 que usaba en la sentencia con parametros y
> ahora
> ambas sentencias usan :
>
> Para Parametros:
> |--Index Scan(OBJECT:([Sekur].[dbo].[D_MOVI_ATG].[D_MOVI_ATG2] AS [T3]),
> WHERE:((((([T3].[FECHA]>=Convert([@FECHAINI]) AND
> [T3].[FECHA]<Convert([@FECHAFIN])) AND [T3].[CDG_ZON]=[@CDG_ZON]) AND
> (substring([T3]
>
> Sin Parametros:
> |--Index Scan(OBJECT:([Sekur].[dbo].[D_MOVI_ATG].[D_MOVI_ATG2] AS [T3]),
> WHERE:((((([T3].[FECHA]>='Oct 1 2005 12:00AM' AND [T3].[FECHA]<'Oct 31
> 2005
> 12:00AM') AND [T3].[CDG_ZON]='02') AND (substring([T3].[DO
>
> Obteniendo la Misma Velocidad de Respuesta de 3 segundos para ambos
> casos.
>
>
> ES por Eso que necesito una Explicacion del Porque esto????
> Que Hace Index Seek que no Hace IndexScan?
> Que Hace IndexScan que no Hace Index Seek??
>
> Gracias
>
>
> Dany Acosta
>
>
>
> "Developers" escribió en el mensaje
> news:O8qyOf%
>> Amigos tengo una Consulta que al poner parametros se demora 30 segundos


y
>> sin parametros se demora 3 segundos
>> osea:
>>
>> Tengo esta consulta que se demora 3 a 4 segundos en en traer 11582:
>> DECLARE @FechaStk char(8)
>> Set @FechaStk='20051001'
>>
>> SELECT T3.COD_ITE, T3.FECHA, SUM(T3.ING_ITE-T3.SAL_ITE) AS CANT_DIAR
>> FROM D_MOVI_ATG T3 WITH (NOLOCK)
>> WHERE (T3.FECHA>='20051001' AND T3.FECHA<'20051031') AND


T3.CDG_ZON='02'
> AND
>> SUBSTRING(T3.DOC_REF,1,2) NOT IN ('IK','SK','SD','AT','TA') AND
> T3.AREA='10'
>> AND T3.ANU=' ' AND T3.FASN NOT IN ('N')
>> GROUP BY T3.COD_ITE,T3.FECHA
>> Union
>> SELECT T1.COD_ITE, @FechaStk as Fecha, SUM(T1.STK_INI) AS CANT_DIAR
>> FROM D_INVE_ATG T1 WITH (NOLOCK)
>> WHERE T1.ANHO='2005' AND T1.CDG_ZON='02' AND T1.AREA='10'
>> GROUP BY T1.COD_ITE
>> UNION
>> SELECT T2.COD_ITE, @FechaStk as Fecha, SUM(T2.ING_ITE-T2.SAL_ITE) AS
>> CANT_DIAR
>> FROM D_MOVI_ATG T2 WITH (NOLOCK)
>> WHERE T2.ANHO='2005' AND T2.CDG_ZON='02' AND SUBSTRING(T2.DOC_REF,1,2)
>> NOT
>> IN ('IK','SK','SD','AT','TA') AND T2.AREA='10' AND T2.ANU=' ' AND


T2.FASN
>> NOT IN ('N') AND T2.FECHA<'20051001'
>> GROUP BY T2.COD_ITE
>>
>> Ahora la Misma Consulta pero en lugar de escribir los valores mando los
>> parametros declarados:
>>
>> DECLARE @FECHAINI CHAR(8), @FECHAFIN CHAR(8), @CDG_ZON CHAR(2), @AREA
>> CHAR(2)
>> DECLARE @AÑO CHAR(4), @ANU CHAR(1), @FECHASTK DATETIME
>> SET @FECHAINI = '20051001'
>> SET @FECHAFIN = '20051031'
>> SET @CDG_ZON = '02'
>> SET @AREA = '10'
>> SET @FECHASTK = CAST(@FECHAINI AS DATETIME)-1
>> SET @AÑO = CAST(YEAR(@FECHASTK) AS CHAR(4))
>> SET @ANU = SPACE(1)
>>
>> SELECT T3.COD_ITE, T3.FECHA, SUM(T3.ING_ITE-T3.SAL_ITE) AS CANT_DIAR
>> FROM D_MOVI_ATG T3 WITH (NOLOCK)
>> WHERE (T3.FECHA>=@FECHAINI AND T3.FECHA<@FECHAFIN) AND
>> T3.CDG_ZON=@CDG_ZON
>> AND SUBSTRING(T3.DOC_REF,1,2) NOT IN ('IK','SK','SD','AT','TA') AND
>> T3.AREA=@AREA AND T3.ANU=@ANU AND T3.FASN NOT IN ('N')
>> GROUP BY T3.COD_ITE,T3.FECHA
>> Union
>> SELECT T1.COD_ITE, @FechaStk as Fecha, SUM(T1.STK_INI) AS CANT_DIAR
>> FROM D_INVE_ATG T1 WITH (NOLOCK)
>> WHERE T1.ANHO=@AÑO AND T1.CDG_ZON=@CDG_ZON AND T1.AREA=@AREA
>> GROUP BY T1.COD_ITE
>> UNION
>> SELECT T2.COD_ITE, @FechaStk as Fecha, SUM(T2.ING_ITE-T2.SAL_ITE) AS
>> CANT_DIAR
>> FROM D_MOVI_ATG T2 WITH (NOLOCK)
>> WHERE T2.ANHO=@AÑO AND T2.CDG_ZON=@CDG_ZON AND


SUBSTRING(T2.DOC_REF,1,2)
> NOT
>> IN ('IK','SK','SD','AT','TA') AND T2.AREA=@AREA AND T2.ANU=@ANU AND
> T2.FASN
>> NOT IN ('N') AND T2.FECHA<@FECHAINI
>> GROUP BY T2.COD_ITE
>>
>> Esta Consulta se demora en responder de 30 a 40 segundos en traer 11582
> que
>> es el mismo resultado de la anterior:.
>>
>> Las pruebas lo estoy haciendo en QA.
>>
>> Me podrian explicar del porque pasa esto??? se supone que deberia tener
>> el
>> mismo tiempo de respuesta
>>
>> Gracias
>>
>>
>> Dany Acosta
>>
>>
>
>


Respuesta Responder a este mensaje
#7 Maxi [MVP]
24/12/2005 - 15:13 | Informe spam
Hola, en el query analizer anda a las opciones y fijate que el maximo de
cadena sea mayor a 255


Salu2
-
[MVP] SQL Server
Orador para Culminis Latam
www.sqlgurus.org



"Developers" escribió en el mensaje
news:
y como puedo obtener el Plan Completo ya que el Sqlserver me corta cuando
algunas cadenas(Lineas) del plan son demasiadas largas.

Gracias


"Maxi [MVP]" escribió en el mensaje
news:
Hola, hay casos que un index seek es peor que un index Scan, por ej, si
tiene que partir la consulta. A mi me gustaria ver el plan completo de
ejecucion


Salu2
-
[MVP] SQL Server
Orador para Culminis Latam
www.sqlgurus.org



"Developers" escribió en el mensaje
news:eGjWh0$
> Necesito una Explicacion:
>
> Porque un Index Scan es mas Rapido que un Index Seek, encontre mi


problema
> y
> era esto:
>
> En la Sentencia que Usa Parametros Sqlserver usaba
> Index Seek(OBJECT:([Sekur].[dbo].[D_MOVI_ATG].[D_MOVI_ATG3] AS [T3]),
> SEEK:([T3].[CDG_ZON]=[@CDG_ZON]), WHERE:((((substring([T3].[DOC_REF],


1,
> 2)<'TA' OR substring([T3].[DOC_REF], 1, 2)>'TA') AND (substrin
>
> En la Sentencia que NO Usaba Parametros SqlServer Usaba:
> |--Index Scan(OBJECT:([Sekur].[dbo].[D_MOVI_ATG].[D_MOVI_ATG2] AS
> [T3]),
> WHERE:((((([T3].[FECHA]>='Oct 1 2005 12:00AM' AND [T3].[FECHA]<'Oct 31
> 2005
> 12:00AM') AND [T3].[CDG_ZON]='02') AND (substring([T3].[DO
>
>
> Borre el Indice D_MOVI_ATG3 que usaba en la sentencia con parametros y
> ahora
> ambas sentencias usan :
>
> Para Parametros:
> |--Index Scan(OBJECT:([Sekur].[dbo].[D_MOVI_ATG].[D_MOVI_ATG2] AS
> [T3]),
> WHERE:((((([T3].[FECHA]>=Convert([@FECHAINI]) AND
> [T3].[FECHA]<Convert([@FECHAFIN])) AND [T3].[CDG_ZON]=[@CDG_ZON]) AND
> (substring([T3]
>
> Sin Parametros:
> |--Index Scan(OBJECT:([Sekur].[dbo].[D_MOVI_ATG].[D_MOVI_ATG2] AS
> [T3]),
> WHERE:((((([T3].[FECHA]>='Oct 1 2005 12:00AM' AND [T3].[FECHA]<'Oct 31
> 2005
> 12:00AM') AND [T3].[CDG_ZON]='02') AND (substring([T3].[DO
>
> Obteniendo la Misma Velocidad de Respuesta de 3 segundos para ambos
> casos.
>
>
> ES por Eso que necesito una Explicacion del Porque esto????
> Que Hace Index Seek que no Hace IndexScan?
> Que Hace IndexScan que no Hace Index Seek??
>
> Gracias
>
>
> Dany Acosta
>
>
>
> "Developers" escribió en el mensaje
> news:O8qyOf%
>> Amigos tengo una Consulta que al poner parametros se demora 30
>> segundos


y
>> sin parametros se demora 3 segundos
>> osea:
>>
>> Tengo esta consulta que se demora 3 a 4 segundos en en traer 11582:
>> DECLARE @FechaStk char(8)
>> Set @FechaStk='20051001'
>>
>> SELECT T3.COD_ITE, T3.FECHA, SUM(T3.ING_ITE-T3.SAL_ITE) AS CANT_DIAR
>> FROM D_MOVI_ATG T3 WITH (NOLOCK)
>> WHERE (T3.FECHA>='20051001' AND T3.FECHA<'20051031') AND


T3.CDG_ZON='02'
> AND
>> SUBSTRING(T3.DOC_REF,1,2) NOT IN ('IK','SK','SD','AT','TA') AND
> T3.AREA='10'
>> AND T3.ANU=' ' AND T3.FASN NOT IN ('N')
>> GROUP BY T3.COD_ITE,T3.FECHA
>> Union
>> SELECT T1.COD_ITE, @FechaStk as Fecha, SUM(T1.STK_INI) AS CANT_DIAR
>> FROM D_INVE_ATG T1 WITH (NOLOCK)
>> WHERE T1.ANHO='2005' AND T1.CDG_ZON='02' AND T1.AREA='10'
>> GROUP BY T1.COD_ITE
>> UNION
>> SELECT T2.COD_ITE, @FechaStk as Fecha, SUM(T2.ING_ITE-T2.SAL_ITE) AS
>> CANT_DIAR
>> FROM D_MOVI_ATG T2 WITH (NOLOCK)
>> WHERE T2.ANHO='2005' AND T2.CDG_ZON='02' AND SUBSTRING(T2.DOC_REF,1,2)
>> NOT
>> IN ('IK','SK','SD','AT','TA') AND T2.AREA='10' AND T2.ANU=' ' AND


T2.FASN
>> NOT IN ('N') AND T2.FECHA<'20051001'
>> GROUP BY T2.COD_ITE
>>
>> Ahora la Misma Consulta pero en lugar de escribir los valores mando
>> los
>> parametros declarados:
>>
>> DECLARE @FECHAINI CHAR(8), @FECHAFIN CHAR(8), @CDG_ZON CHAR(2), @AREA
>> CHAR(2)
>> DECLARE @AÑO CHAR(4), @ANU CHAR(1), @FECHASTK DATETIME
>> SET @FECHAINI = '20051001'
>> SET @FECHAFIN = '20051031'
>> SET @CDG_ZON = '02'
>> SET @AREA = '10'
>> SET @FECHASTK = CAST(@FECHAINI AS DATETIME)-1
>> SET @AÑO = CAST(YEAR(@FECHASTK) AS CHAR(4))
>> SET @ANU = SPACE(1)
>>
>> SELECT T3.COD_ITE, T3.FECHA, SUM(T3.ING_ITE-T3.SAL_ITE) AS CANT_DIAR
>> FROM D_MOVI_ATG T3 WITH (NOLOCK)
>> WHERE (T3.FECHA>=@FECHAINI AND T3.FECHA<@FECHAFIN) AND
>> T3.CDG_ZON=@CDG_ZON
>> AND SUBSTRING(T3.DOC_REF,1,2) NOT IN ('IK','SK','SD','AT','TA') AND
>> T3.AREA=@AREA AND T3.ANU=@ANU AND T3.FASN NOT IN ('N')
>> GROUP BY T3.COD_ITE,T3.FECHA
>> Union
>> SELECT T1.COD_ITE, @FechaStk as Fecha, SUM(T1.STK_INI) AS CANT_DIAR
>> FROM D_INVE_ATG T1 WITH (NOLOCK)
>> WHERE T1.ANHO=@AÑO AND T1.CDG_ZON=@CDG_ZON AND T1.AREA=@AREA
>> GROUP BY T1.COD_ITE
>> UNION
>> SELECT T2.COD_ITE, @FechaStk as Fecha, SUM(T2.ING_ITE-T2.SAL_ITE) AS
>> CANT_DIAR
>> FROM D_MOVI_ATG T2 WITH (NOLOCK)
>> WHERE T2.ANHO=@AÑO AND T2.CDG_ZON=@CDG_ZON AND


SUBSTRING(T2.DOC_REF,1,2)
> NOT
>> IN ('IK','SK','SD','AT','TA') AND T2.AREA=@AREA AND T2.ANU=@ANU AND
> T2.FASN
>> NOT IN ('N') AND T2.FECHA<@FECHAINI
>> GROUP BY T2.COD_ITE
>>
>> Esta Consulta se demora en responder de 30 a 40 segundos en traer
>> 11582
> que
>> es el mismo resultado de la anterior:.
>>
>> Las pruebas lo estoy haciendo en QA.
>>
>> Me podrian explicar del porque pasa esto??? se supone que deberia
>> tener
>> el
>> mismo tiempo de respuesta
>>
>> Gracias
>>
>>
>> Dany Acosta
>>
>>
>
>






Respuesta Responder a este mensaje
#8 qwalgrande
24/12/2005 - 19:47 | Informe spam
Hola.

Sin el plan de ejecución es un poco difícil. Pero, en ocasiones, los tipos
de datos juegan malas pasadas y en vez de usar bien los índices, realizan
conversiones previas que obligan a realizar recorridos y no búsquedas. ¿Es
posible que el tipo de datos de los parámetros no coincida con el tipo de
datos de los campos?

También deberías asegurarte de que los valores que están pasando a los
parámetros son los que tú quieres indicar. Y ayudaría que nos pasaras el
plan de ejecución, aunque seguro que si tú mismo los comparas podrás sacar
más conclusiones que las que te podemos facilitar nosotros.

Alberto López Grande (qwalgrande)
"Developers" escribió en el mensaje
news:O8qyOf%
Amigos tengo una Consulta que al poner parametros se demora 30 segundos y
sin parametros se demora 3 segundos
osea:

Tengo esta consulta que se demora 3 a 4 segundos en en traer 11582:
DECLARE @FechaStk char(8)
Set @FechaStk='20051001'

SELECT T3.COD_ITE, T3.FECHA, SUM(T3.ING_ITE-T3.SAL_ITE) AS CANT_DIAR
FROM D_MOVI_ATG T3 WITH (NOLOCK)
WHERE (T3.FECHA>='20051001' AND T3.FECHA<'20051031') AND T3.CDG_ZON='02'
AND
SUBSTRING(T3.DOC_REF,1,2) NOT IN ('IK','SK','SD','AT','TA') AND
T3.AREA='10'
AND T3.ANU=' ' AND T3.FASN NOT IN ('N')
GROUP BY T3.COD_ITE,T3.FECHA
Union
SELECT T1.COD_ITE, @FechaStk as Fecha, SUM(T1.STK_INI) AS CANT_DIAR
FROM D_INVE_ATG T1 WITH (NOLOCK)
WHERE T1.ANHO='2005' AND T1.CDG_ZON='02' AND T1.AREA='10'
GROUP BY T1.COD_ITE
UNION
SELECT T2.COD_ITE, @FechaStk as Fecha, SUM(T2.ING_ITE-T2.SAL_ITE) AS
CANT_DIAR
FROM D_MOVI_ATG T2 WITH (NOLOCK)
WHERE T2.ANHO='2005' AND T2.CDG_ZON='02' AND SUBSTRING(T2.DOC_REF,1,2) NOT
IN ('IK','SK','SD','AT','TA') AND T2.AREA='10' AND T2.ANU=' ' AND T2.FASN
NOT IN ('N') AND T2.FECHA<'20051001'
GROUP BY T2.COD_ITE

Ahora la Misma Consulta pero en lugar de escribir los valores mando los
parametros declarados:

DECLARE @FECHAINI CHAR(8), @FECHAFIN CHAR(8), @CDG_ZON CHAR(2), @AREA
CHAR(2)
DECLARE @AÑO CHAR(4), @ANU CHAR(1), @FECHASTK DATETIME
SET @FECHAINI = '20051001'
SET @FECHAFIN = '20051031'
SET @CDG_ZON = '02'
SET @AREA = '10'
SET @FECHASTK = CAST(@FECHAINI AS DATETIME)-1
SET @AÑO = CAST(YEAR(@FECHASTK) AS CHAR(4))
SET @ANU = SPACE(1)

SELECT T3.COD_ITE, T3.FECHA, SUM(T3.ING_ITE-T3.SAL_ITE) AS CANT_DIAR
FROM D_MOVI_ATG T3 WITH (NOLOCK)
WHERE (T3.FECHA>=@FECHAINI AND T3.FECHA<@FECHAFIN) AND T3.CDG_ZON=@CDG_ZON
AND SUBSTRING(T3.DOC_REF,1,2) NOT IN ('IK','SK','SD','AT','TA') AND
T3.AREA=@AREA AND T3.ANU=@ANU AND T3.FASN NOT IN ('N')
GROUP BY T3.COD_ITE,T3.FECHA
Union
SELECT T1.COD_ITE, @FechaStk as Fecha, SUM(T1.STK_INI) AS CANT_DIAR
FROM D_INVE_ATG T1 WITH (NOLOCK)
WHERE T1.ANHO=@AÑO AND T1.CDG_ZON=@CDG_ZON AND T1.AREA=@AREA
GROUP BY T1.COD_ITE
UNION
SELECT T2.COD_ITE, @FechaStk as Fecha, SUM(T2.ING_ITE-T2.SAL_ITE) AS
CANT_DIAR
FROM D_MOVI_ATG T2 WITH (NOLOCK)
WHERE T2.ANHO=@AÑO AND T2.CDG_ZON=@CDG_ZON AND SUBSTRING(T2.DOC_REF,1,2)
NOT
IN ('IK','SK','SD','AT','TA') AND T2.AREA=@AREA AND T2.ANU=@ANU AND
T2.FASN
NOT IN ('N') AND T2.FECHA<@FECHAINI
GROUP BY T2.COD_ITE

Esta Consulta se demora en responder de 30 a 40 segundos en traer 11582
que
es el mismo resultado de la anterior:.

Las pruebas lo estoy haciendo en QA.

Me podrian explicar del porque pasa esto??? se supone que deberia tener el
mismo tiempo de respuesta

Gracias


Dany Acosta


Respuesta Responder a este mensaje
#9 Alejandro Mesa
27/12/2005 - 15:18 | Informe spam
Dany,

No podemos comparar mangos con peras. SQL Server esta usando diferentes
indices para resolver cada sentencia, por lo que en este caso no podemos
comparar el "index scan" con el "index seek". Como dijo Maxi, chequea el
setting que tienes en QA para el maximo numero de caracteres en una columna y
ve si puedes postear nuevamente las sentencias y su plan de ejecucion
correspondiente.

La operacion mas rapida para accesar una fila en una tabla, sera siempre un
"index seek".


AMB

"Developers" wrote:

Necesito una Explicacion:

Porque un Index Scan es mas Rapido que un Index Seek, encontre mi problema y
era esto:

En la Sentencia que Usa Parametros Sqlserver usaba
Index Seek(OBJECT:([Sekur].[dbo].[D_MOVI_ATG].[D_MOVI_ATG3] AS [T3]),
SEEK:([T3].[CDG_ZON]=[@CDG_ZON]), WHERE:((((substring([T3].[DOC_REF], 1,
2)<'TA' OR substring([T3].[DOC_REF], 1, 2)>'TA') AND (substrin

En la Sentencia que NO Usaba Parametros SqlServer Usaba:
|--Index Scan(OBJECT:([Sekur].[dbo].[D_MOVI_ATG].[D_MOVI_ATG2] AS [T3]),
WHERE:((((([T3].[FECHA]>='Oct 1 2005 12:00AM' AND [T3].[FECHA]<'Oct 31 2005
12:00AM') AND [T3].[CDG_ZON]='02') AND (substring([T3].[DO


Borre el Indice D_MOVI_ATG3 que usaba en la sentencia con parametros y ahora
ambas sentencias usan :

Para Parametros:
|--Index Scan(OBJECT:([Sekur].[dbo].[D_MOVI_ATG].[D_MOVI_ATG2] AS [T3]),
WHERE:((((([T3].[FECHA]>=Convert([@FECHAINI]) AND
[T3].[FECHA]<Convert([@FECHAFIN])) AND [T3].[CDG_ZON]=[@CDG_ZON]) AND
(substring([T3]

Sin Parametros:
|--Index Scan(OBJECT:([Sekur].[dbo].[D_MOVI_ATG].[D_MOVI_ATG2] AS [T3]),
WHERE:((((([T3].[FECHA]>='Oct 1 2005 12:00AM' AND [T3].[FECHA]<'Oct 31 2005
12:00AM') AND [T3].[CDG_ZON]='02') AND (substring([T3].[DO

Obteniendo la Misma Velocidad de Respuesta de 3 segundos para ambos
casos.


ES por Eso que necesito una Explicacion del Porque esto????
Que Hace Index Seek que no Hace IndexScan?
Que Hace IndexScan que no Hace Index Seek??

Gracias


Dany Acosta



"Developers" escribió en el mensaje
news:O8qyOf%
> Amigos tengo una Consulta que al poner parametros se demora 30 segundos y
> sin parametros se demora 3 segundos
> osea:
>
> Tengo esta consulta que se demora 3 a 4 segundos en en traer 11582:
> DECLARE @FechaStk char(8)
> Set @FechaStk='20051001'
>
> SELECT T3.COD_ITE, T3.FECHA, SUM(T3.ING_ITE-T3.SAL_ITE) AS CANT_DIAR
> FROM D_MOVI_ATG T3 WITH (NOLOCK)
> WHERE (T3.FECHA>='20051001' AND T3.FECHA<'20051031') AND T3.CDG_ZON='02'
AND
> SUBSTRING(T3.DOC_REF,1,2) NOT IN ('IK','SK','SD','AT','TA') AND
T3.AREA='10'
> AND T3.ANU=' ' AND T3.FASN NOT IN ('N')
> GROUP BY T3.COD_ITE,T3.FECHA
> Union
> SELECT T1.COD_ITE, @FechaStk as Fecha, SUM(T1.STK_INI) AS CANT_DIAR
> FROM D_INVE_ATG T1 WITH (NOLOCK)
> WHERE T1.ANHO='2005' AND T1.CDG_ZON='02' AND T1.AREA='10'
> GROUP BY T1.COD_ITE
> UNION
> SELECT T2.COD_ITE, @FechaStk as Fecha, SUM(T2.ING_ITE-T2.SAL_ITE) AS
> CANT_DIAR
> FROM D_MOVI_ATG T2 WITH (NOLOCK)
> WHERE T2.ANHO='2005' AND T2.CDG_ZON='02' AND SUBSTRING(T2.DOC_REF,1,2) NOT
> IN ('IK','SK','SD','AT','TA') AND T2.AREA='10' AND T2.ANU=' ' AND T2.FASN
> NOT IN ('N') AND T2.FECHA<'20051001'
> GROUP BY T2.COD_ITE
>
> Ahora la Misma Consulta pero en lugar de escribir los valores mando los
> parametros declarados:
>
> DECLARE @FECHAINI CHAR(8), @FECHAFIN CHAR(8), @CDG_ZON CHAR(2), @AREA
> CHAR(2)
> DECLARE @AÑO CHAR(4), @ANU CHAR(1), @FECHASTK DATETIME
> SET @FECHAINI = '20051001'
> SET @FECHAFIN = '20051031'
> SET @CDG_ZON = '02'
> SET @AREA = '10'
> SET @FECHASTK = CAST(@FECHAINI AS DATETIME)-1
> SET @AÑO = CAST(YEAR(@FECHASTK) AS CHAR(4))
> SET @ANU = SPACE(1)
>
> SELECT T3.COD_ITE, T3.FECHA, SUM(T3.ING_ITE-T3.SAL_ITE) AS CANT_DIAR
> FROM D_MOVI_ATG T3 WITH (NOLOCK)
> WHERE (T3.FECHA>=@FECHAINI AND T3.FECHA<@FECHAFIN) AND T3.CDG_ZON=@CDG_ZON
> AND SUBSTRING(T3.DOC_REF,1,2) NOT IN ('IK','SK','SD','AT','TA') AND
> T3.AREA=@AREA AND T3.ANU=@ANU AND T3.FASN NOT IN ('N')
> GROUP BY T3.COD_ITE,T3.FECHA
> Union
> SELECT T1.COD_ITE, @FechaStk as Fecha, SUM(T1.STK_INI) AS CANT_DIAR
> FROM D_INVE_ATG T1 WITH (NOLOCK)
> WHERE T1.ANHO=@AÑO AND T1.CDG_ZON=@CDG_ZON AND T1.AREA=@AREA
> GROUP BY T1.COD_ITE
> UNION
> SELECT T2.COD_ITE, @FechaStk as Fecha, SUM(T2.ING_ITE-T2.SAL_ITE) AS
> CANT_DIAR
> FROM D_MOVI_ATG T2 WITH (NOLOCK)
> WHERE T2.ANHO=@AÑO AND T2.CDG_ZON=@CDG_ZON AND SUBSTRING(T2.DOC_REF,1,2)
NOT
> IN ('IK','SK','SD','AT','TA') AND T2.AREA=@AREA AND T2.ANU=@ANU AND
T2.FASN
> NOT IN ('N') AND T2.FECHA<@FECHAINI
> GROUP BY T2.COD_ITE
>
> Esta Consulta se demora en responder de 30 a 40 segundos en traer 11582
que
> es el mismo resultado de la anterior:.
>
> Las pruebas lo estoy haciendo en QA.
>
> Me podrian explicar del porque pasa esto??? se supone que deberia tener el
> mismo tiempo de respuesta
>
> Gracias
>
>
> Dany Acosta
>
>



Respuesta Responder a este mensaje
#10 Mauro
27/12/2005 - 21:41 | Informe spam
lo del rendimiento puede ser por que el scan esta haciendo menos operaciones
SUBSTRING
pero el Seek siempre es mas rapido, lo lento es lo que esta comparando en el
seek contra las simples comparaciones de fechas del scan,


"Alejandro Mesa" wrote in message
news:
Dany,

No podemos comparar mangos con peras. SQL Server esta usando diferentes
indices para resolver cada sentencia, por lo que en este caso no podemos
comparar el "index scan" con el "index seek". Como dijo Maxi, chequea el
setting que tienes en QA para el maximo numero de caracteres en una


columna y
ve si puedes postear nuevamente las sentencias y su plan de ejecucion
correspondiente.

La operacion mas rapida para accesar una fila en una tabla, sera siempre


un
"index seek".


AMB

"Developers" wrote:

> Necesito una Explicacion:
>
> Porque un Index Scan es mas Rapido que un Index Seek, encontre mi


problema y
> era esto:
>
> En la Sentencia que Usa Parametros Sqlserver usaba
> Index Seek(OBJECT:([Sekur].[dbo].[D_MOVI_ATG].[D_MOVI_ATG3] AS [T3]),
> SEEK:([T3].[CDG_ZON]=[@CDG_ZON]), WHERE:((((substring([T3].[DOC_REF],


1,
> 2)<'TA' OR substring([T3].[DOC_REF], 1, 2)>'TA') AND (substrin
>
> En la Sentencia que NO Usaba Parametros SqlServer Usaba:
> |--Index Scan(OBJECT:([Sekur].[dbo].[D_MOVI_ATG].[D_MOVI_ATG2] AS [T3]),
> WHERE:((((([T3].[FECHA]>='Oct 1 2005 12:00AM' AND [T3].[FECHA]<'Oct 31


2005
> 12:00AM') AND [T3].[CDG_ZON]='02') AND (substring([T3].[DO
>
>
> Borre el Indice D_MOVI_ATG3 que usaba en la sentencia con parametros y


ahora
> ambas sentencias usan :
>
> Para Parametros:
> |--Index Scan(OBJECT:([Sekur].[dbo].[D_MOVI_ATG].[D_MOVI_ATG2] AS [T3]),
> WHERE:((((([T3].[FECHA]>=Convert([@FECHAINI]) AND
> [T3].[FECHA]<Convert([@FECHAFIN])) AND [T3].[CDG_ZON]=[@CDG_ZON]) AND
> (substring([T3]
>
> Sin Parametros:
> |--Index Scan(OBJECT:([Sekur].[dbo].[D_MOVI_ATG].[D_MOVI_ATG2] AS [T3]),
> WHERE:((((([T3].[FECHA]>='Oct 1 2005 12:00AM' AND [T3].[FECHA]<'Oct 31


2005
> 12:00AM') AND [T3].[CDG_ZON]='02') AND (substring([T3].[DO
>
> Obteniendo la Misma Velocidad de Respuesta de 3 segundos para ambos
> casos.
>
>
> ES por Eso que necesito una Explicacion del Porque esto????
> Que Hace Index Seek que no Hace IndexScan?
> Que Hace IndexScan que no Hace Index Seek??
>
> Gracias
>
>
> Dany Acosta
>
>
>
> "Developers" escribió en el mensaje
> news:O8qyOf%
> > Amigos tengo una Consulta que al poner parametros se demora 30


segundos y
> > sin parametros se demora 3 segundos
> > osea:
> >
> > Tengo esta consulta que se demora 3 a 4 segundos en en traer 11582:
> > DECLARE @FechaStk char(8)
> > Set @FechaStk='20051001'
> >
> > SELECT T3.COD_ITE, T3.FECHA, SUM(T3.ING_ITE-T3.SAL_ITE) AS CANT_DIAR
> > FROM D_MOVI_ATG T3 WITH (NOLOCK)
> > WHERE (T3.FECHA>='20051001' AND T3.FECHA<'20051031') AND


T3.CDG_ZON='02'
> AND
> > SUBSTRING(T3.DOC_REF,1,2) NOT IN ('IK','SK','SD','AT','TA') AND
> T3.AREA='10'
> > AND T3.ANU=' ' AND T3.FASN NOT IN ('N')
> > GROUP BY T3.COD_ITE,T3.FECHA
> > Union
> > SELECT T1.COD_ITE, @FechaStk as Fecha, SUM(T1.STK_INI) AS CANT_DIAR
> > FROM D_INVE_ATG T1 WITH (NOLOCK)
> > WHERE T1.ANHO='2005' AND T1.CDG_ZON='02' AND T1.AREA='10'
> > GROUP BY T1.COD_ITE
> > UNION
> > SELECT T2.COD_ITE, @FechaStk as Fecha, SUM(T2.ING_ITE-T2.SAL_ITE) AS
> > CANT_DIAR
> > FROM D_MOVI_ATG T2 WITH (NOLOCK)
> > WHERE T2.ANHO='2005' AND T2.CDG_ZON='02' AND SUBSTRING(T2.DOC_REF,1,2)


NOT
> > IN ('IK','SK','SD','AT','TA') AND T2.AREA='10' AND T2.ANU=' ' AND


T2.FASN
> > NOT IN ('N') AND T2.FECHA<'20051001'
> > GROUP BY T2.COD_ITE
> >
> > Ahora la Misma Consulta pero en lugar de escribir los valores mando


los
> > parametros declarados:
> >
> > DECLARE @FECHAINI CHAR(8), @FECHAFIN CHAR(8), @CDG_ZON CHAR(2), @AREA
> > CHAR(2)
> > DECLARE @AÑO CHAR(4), @ANU CHAR(1), @FECHASTK DATETIME
> > SET @FECHAINI = '20051001'
> > SET @FECHAFIN = '20051031'
> > SET @CDG_ZON = '02'
> > SET @AREA = '10'
> > SET @FECHASTK = CAST(@FECHAINI AS DATETIME)-1
> > SET @AÑO = CAST(YEAR(@FECHASTK) AS CHAR(4))
> > SET @ANU = SPACE(1)
> >
> > SELECT T3.COD_ITE, T3.FECHA, SUM(T3.ING_ITE-T3.SAL_ITE) AS CANT_DIAR
> > FROM D_MOVI_ATG T3 WITH (NOLOCK)
> > WHERE (T3.FECHA>=@FECHAINI AND T3.FECHA<@FECHAFIN) AND


T3.CDG_ZON=@CDG_ZON
> > AND SUBSTRING(T3.DOC_REF,1,2) NOT IN ('IK','SK','SD','AT','TA') AND
> > T3.AREA=@AREA AND T3.ANU=@ANU AND T3.FASN NOT IN ('N')
> > GROUP BY T3.COD_ITE,T3.FECHA
> > Union
> > SELECT T1.COD_ITE, @FechaStk as Fecha, SUM(T1.STK_INI) AS CANT_DIAR
> > FROM D_INVE_ATG T1 WITH (NOLOCK)
> > WHERE T1.ANHO=@AÑO AND T1.CDG_ZON=@CDG_ZON AND T1.AREA=@AREA
> > GROUP BY T1.COD_ITE
> > UNION
> > SELECT T2.COD_ITE, @FechaStk as Fecha, SUM(T2.ING_ITE-T2.SAL_ITE) AS
> > CANT_DIAR
> > FROM D_MOVI_ATG T2 WITH (NOLOCK)
> > WHERE T2.ANHO=@AÑO AND T2.CDG_ZON=@CDG_ZON AND


SUBSTRING(T2.DOC_REF,1,2)
> NOT
> > IN ('IK','SK','SD','AT','TA') AND T2.AREA=@AREA AND T2.ANU=@ANU AND
> T2.FASN
> > NOT IN ('N') AND T2.FECHA<@FECHAINI
> > GROUP BY T2.COD_ITE
> >
> > Esta Consulta se demora en responder de 30 a 40 segundos en traer


11582
> que
> > es el mismo resultado de la anterior:.
> >
> > Las pruebas lo estoy haciendo en QA.
> >
> > Me podrian explicar del porque pasa esto??? se supone que deberia


tener el
> > mismo tiempo de respuesta
> >
> > Gracias
> >
> >
> > Dany Acosta
> >
> >
>
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida