Lentitud en consulta con variables

06/05/2010 - 17:40 por Alonzo | Informe spam
Que tal señores. Estoy tratando de maximizar una consulta de una tabla de
aprox. 10 millones. La tabla tiene un campo Medida que a la vez es PK.

WHERE Ind.medida BETWEEN 1535 And 1590


WHERE Ind.medida BETWEEN @medidaini And medidafin
Medida.

¿Alguna explicacion porque la demora si aparentemente ambos son iguales?. No
creo que el motor del SQL se demore tanto en intrepretar y procesar un par
de variables sencillas.

Mi servidor es un WK2003 / SQL SERVER 2000.

Gracias por alguna sugerencia.

Preguntas similare

Leer las respuestas

#6 Alonzo
07/05/2010 - 21:53 | Informe spam
Hola que tal. el SP es llamado desde el mismo Servidor del SQL, osea, en el
servidor corre un proceso grande (SP) y este a la vez llama a este otro (SP)
para evaluar las medidas. Es mas las pruebas la estoy efectuando en el
analizador de consultas del SQL.

Si alguno de Uds. tiene una tabla digamos de mas de 1 millon registros (esto
es necesario para analizar el tiempo) con una PK de tipo INT. y hace la
sgte: prueba

DECLARE @idpkini INT
DECLARE @idpkfin INT

SET @idpkini = 10000 -- > ó cualquier
SET @idpkfin = 50000 -- > ó cualquier otro-..tratar que la cantidad de
registros devuelta sea superior a los 30000

SELECT <campos> FROM mytable WHERE idpk BETWEEN 10000 And
000 --Resultado mas rapido

SELECT <campos> FROM mytable WHERE idpk BETWEEN @idpkini And @idpkfin --
El resultado es 3 ó veces mas lento que el anterior.


Gracias por tu apoyo.



"Victor Koch" <v i c t o r (arroba)correo(punto)waldbott(punto)com(punto)ar>
escribió en el mensaje news:
Hola,

Si por casualidad esa llamada al SP la haces con una aplicación que se
vale
de ADO para acceder a la base de datos y llamas al SP con el objeto
ADODB.Commad te dire que esa demora es propia del ADODB.Commad.

Por la forma de trabajar el objeto ADODB.Commad, para este tipo de
consultas, lo que hace es solicitar al servidor un conjunto de registros
sin
importar los parámetros, luego obtenido ese conjunto de registros vuelve a
hacer una especie de SELECT, de ese conjunto de registros obtenidos, con
los
parámetros que vos le pasas para así obtener el resultado final.

Esa es la razón de la demora.

Yo te aconsejaría que la aplicación arme el select final y mandes al
servidor la sentencia ya cocinada.

Un Saludo, Víctor Koch



"Alonzo" escribió en el mensaje
news:
Gracias por responder. Asi es tambien hice esa combinacion y el resultado
es el mismo. Es mas al activar el plan de ejecucion se nota claramente
que el motor ejecuta unos 4 pasos mas.



"Ele" escribió en el mensaje
news:
ya probaste comparando con los simbolos <= >>>> FROM db_indicador Ind

WHERE Ind.medida <= @medidafin And Ind.medida >= @medidaini


"Alonzo" escribió en el mensaje
news:%
La consulta esta ubicada en una Procedimiento Almacenado. El contenido
del SP es una simple consulta:

SELECT <relacion de 7 campos numericos y 2 de varchar(15)>
FROM db_indicador Ind
WHERE Ind.medida BETWEEN @medidaini And medidafin

Levante otro servidor desde Cero y hice las pruebas y el resultado es
el
mismo. Con variables se demora entre 15 a 20 seg. Pero si le pongo los
valores directo, se demora de 2 a 3 seg. Realmente estoy consternado
con la diferencia de tiempo.

Saludos.

"Cotzila" escribió en el mensaje
news:
Podrias especificar mas donde esta esa consulta?? en un procedimiento
en una funcion por código??



http://tsqlafondo.blogspot.com/

On 6 mayo, 17:40, "Alonzo" wrote:
Que tal señores. Estoy tratando de maximizar una consulta de una tabla
de
aprox. 10 millones. La tabla tiene un campo Medida que a la vez es PK.

WHERE Ind.medida BETWEEN 1535 And 1590

WHERE Ind.medida BETWEEN @medidaini And medidafin
Medida.

¿Alguna explicacion porque la demora si aparentemente ambos son
iguales?. No
creo que el motor del SQL se demore tanto en intrepretar y procesar un
par
de variables sencillas.

Mi servidor es un WK2003 / SQL SERVER 2000.

Gracias por alguna sugerencia.

















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