optimizador de sql, indices y algo mas ...

12/05/2004 - 00:46 por csuma | Informe spam
Como estan amigos, tengo un problema con los indices q se usan en una
consulta.
Tengo 2 indices:
i1=Start_time
i2=Cod, Start_time
Y mi query (con una condicion como la de abajo) deberia de usar el indice i2
pero sin embargo usa el indice i1:
where Cod like '663774%' and start_time >= '2004-03-01 17:40:17.700' and
start_time <= '2004-05-11 19:40:17.700' (demora 45 minutos)
Pero si prolongo la fecha para q abarque un mayor rango alli recien se usa
el indice i2 y por ende la consulta es mas rapida q con la condicion
anterior
where Cod like '663774%' and start_time >= '2003-03-01 17:40:17.700' and
start_time <= '2004-05-11 19:40:17.700' (demora 2 minutos)"
Algun compañero tiburon por alli puede indicarme q esta pasando y como
solucionar este problema SIN TENER Q RECURRIR A WITH(INDEX(i2),nolock) ???
pues la condicion se genera dinamicamente y el indice a usar puede ser otro.
Gracias de antemano

Preguntas similare

Leer las respuestas

#1 Maxi
12/05/2004 - 01:52 | Informe spam
Hola, bueno amigo eso no es tan asi como lo dices!! Sql Server tiene sus
planes de Estadisticas y ejecucion los cuales determinaran que indices usar,
que opciones tenemos si no usa los que nosotros queremos

1) Hacer lo que has hecho vos
2) Actualizar las estadisticas de tu motor

UPDATE STATISTICS nombretabla

esto te actualiza las estadisticas de una tabla en particular, fijate si con
eso cambia la cosa :-)

Bye


Salu2

Maxi

Desarrollador 3 estrellas .NET
Buenos Aires - Argentina

MSN:

"csuma" escribió en el mensaje
news:
Como estan amigos, tengo un problema con los indices q se usan en una
consulta.
Tengo 2 indices:
i1=Start_time
i2=Cod, Start_time
Y mi query (con una condicion como la de abajo) deberia de usar el indice


i2
pero sin embargo usa el indice i1:
where Cod like '663774%' and start_time >= '2004-03-01 17:40:17.700' and
start_time <= '2004-05-11 19:40:17.700' (demora 45 minutos)
Pero si prolongo la fecha para q abarque un mayor rango alli recien se usa
el indice i2 y por ende la consulta es mas rapida q con la condicion
anterior
where Cod like '663774%' and start_time >= '2003-03-01 17:40:17.700' and
start_time <= '2004-05-11 19:40:17.700' (demora 2 minutos)"
Algun compañero tiburon por alli puede indicarme q esta pasando y como
solucionar este problema SIN TENER Q RECURRIR A WITH(INDEX(i2),nolock)


???
pues la condicion se genera dinamicamente y el indice a usar puede ser


otro.
Gracias de antemano


Respuesta Responder a este mensaje
#2 Javier Loria
12/05/2004 - 04:57 | Informe spam
Hola Carlos:
Prueba con:
==WHERE Cod LIKE '663774%'
AND Start_Time BETWEEN '2004-03-01 17:40:17.700'
AND '2004-05-11 19:40:17.700'
== A ver si te funciona mejor.
Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
csuma escribio:
Como estan amigos, tengo un problema con los indices q se usan en una
consulta.
Tengo 2 indices:
i1=Start_time
i2=Cod, Start_time
Y mi query (con una condicion como la de abajo) deberia de usar el
indice i2 pero sin embargo usa el indice i1:
where Cod like '663774%' and start_time >= '2004-03-01 17:40:17.700'
and start_time <= '2004-05-11 19:40:17.700' (demora 45 minutos)
Pero si prolongo la fecha para q abarque un mayor rango alli recien
se usa el indice i2 y por ende la consulta es mas rapida q con la
condicion anterior
where Cod like '663774%' and start_time >= '2003-03-01 17:40:17.700'
and start_time <= '2004-05-11 19:40:17.700' (demora 2 minutos)"
Algun compañero tiburon por alli puede indicarme q esta pasando y como
solucionar este problema SIN TENER Q RECURRIR A
WITH(INDEX(i2),nolock) ??? pues la condicion se genera dinamicamente
y el indice a usar puede ser otro. Gracias de antemano
Respuesta Responder a este mensaje
#3 csuma
13/05/2004 - 23:02 | Informe spam
Gracias amigos, en especial a Maxi el problema fue solucionado con Update
Statistics, lo q no entiendo es por q fue necesario q lo actualizara
manualmente pues la base de datos esta configurado para q sea automatico.
Muy agradecidos
Carlos

"csuma" wrote in message
news:
Como estan amigos, tengo un problema con los indices q se usan en una
consulta.
Tengo 2 indices:
i1=Start_time
i2=Cod, Start_time
Y mi query (con una condicion como la de abajo) deberia de usar el indice


i2
pero sin embargo usa el indice i1:
where Cod like '663774%' and start_time >= '2004-03-01 17:40:17.700' and
start_time <= '2004-05-11 19:40:17.700' (demora 45 minutos)
Pero si prolongo la fecha para q abarque un mayor rango alli recien se usa
el indice i2 y por ende la consulta es mas rapida q con la condicion
anterior
where Cod like '663774%' and start_time >= '2003-03-01 17:40:17.700' and
start_time <= '2004-05-11 19:40:17.700' (demora 2 minutos)"
Algun compañero tiburon por alli puede indicarme q esta pasando y como
solucionar este problema SIN TENER Q RECURRIR A WITH(INDEX(i2),nolock)


???
pues la condicion se genera dinamicamente y el indice a usar puede ser


otro.
Gracias de antemano


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