Indices del derecho o del revés?

10/02/2005 - 19:00 por djsalus | Informe spam
Hola a todos, quería formularos un par de preguntas sobre índices, y
luego explicaros un pequeño caso que me está pasando y me estoy
volviendo un poco majareta.

1) ¿es lo mismo un indice A,B que un indice B,A?
2) Si tengo un indice A,B,C y necesito acceder por A,B, ¿tengo que
crear un indice de A,B, o el que tengo ya lo cubre?
3) Si tengo un indice A,B, pero tengo la siguiente query
select * from tabla
where B = 15 and A = 20
¿cogerá el indice A,B, o espera uno que sea B,A por el orden utilizado
en el where?

Y por último, os comento brevemente lo que me está pasando:
Tengo una tabla con 2.000.000 de registros.
Tengo que acceder por 2 campos alfanuméricos, uno con un "=" y el otro
con un "like".
Sería algo así:
select * from tabla
where campoSTR1 = 'pepe'
and campoSTR2 like 'PE______________'

el problema es que esta query tarda unos 10 segundos la primera vez, y
luego unos 2 segundos el resto de veces.
Si cambio de apellido y vuelvo a lanzar la query, otros 10 segundos.

Tengo indice múltiple por campoSTR1,campoSTR2.


¿alguna idea?

Gracias a todos por vuestra ayuda.
 

Leer las respuestas

#1 Maxi
10/02/2005 - 19:25 | Informe spam
Hola, es muy importante la creacion de indices el orden de los campos, si
creas A,B y luego consultas B,A se complicara. Tambien puedes hacer indices
no compuestos o sea uno por A y otro por B.

Con respecto al like, debes tener mucho cuidado porque mucha de las veces no
usa los indices y ese sintoma que comentas es porque por lo general la
primer vez queda guardado el plan de ejecucion y la segunda lo debe volver a
calcular, quizas si armas un Store Procedure esa sensacion la cambies ;)

De todas maneras, los tiempos son importantes pero para poder hablar con mas
propiedad necesitariamos ver los planes de ejecucion de las consultas,
tambien te recomiendo una leida por los libros on line (BOL) el tema de
indices, veras ahi una excelente explicacion sobre dicho tema.

Un abrazo


Salu2
Maxi


"djana" escribió en el mensaje
news:
Hola a todos, quería formularos un par de preguntas sobre índices, y
luego explicaros un pequeño caso que me está pasando y me estoy
volviendo un poco majareta.

1) ¿es lo mismo un indice A,B que un indice B,A?
2) Si tengo un indice A,B,C y necesito acceder por A,B, ¿tengo que
crear un indice de A,B, o el que tengo ya lo cubre?
3) Si tengo un indice A,B, pero tengo la siguiente query
select * from tabla
where B = 15 and A = 20
¿cogerá el indice A,B, o espera uno que sea B,A por el orden utilizado
en el where?

Y por último, os comento brevemente lo que me está pasando:
Tengo una tabla con 2.000.000 de registros.
Tengo que acceder por 2 campos alfanuméricos, uno con un "=" y el otro
con un "like".
Sería algo así:
select * from tabla
where campoSTR1 = 'pepe'
and campoSTR2 like 'PE______________'

el problema es que esta query tarda unos 10 segundos la primera vez, y
luego unos 2 segundos el resto de veces.
Si cambio de apellido y vuelvo a lanzar la query, otros 10 segundos.

Tengo indice múltiple por campoSTR1,campoSTR2.


¿alguna idea?

Gracias a todos por vuestra ayuda.

Preguntas similares