Creacion de Indices

12/06/2008 - 16:23 por Jorge | Informe spam
Bnos Dias .
Tenemos muchas tablas Maestras que cuentan con un campo logico (bit) que
llamamos IsActive (EstaActivo) nos sirve para identificar si un registro
esta activo o a sido borrado, por cuestiones historicas no podemos eliminar
fisicamente el registro.

Cada vez que hacemos una consulta siempre tenemos que poner al final
SELECT
WHERE (Condicion1) AND (condicion2) AND IsActive = 1

Estas son mis preguntas:

Si creo un Indice con multiples columnas es recomendable agregar este Campo
"IsActive"? de ser asi donde deberia colocar el indice? al principio del
indice o al final?

Indice = Campo1,Campo2,IsActive o
Indice = IsActive, Campo1, Campo2

o simplemente debo crear un indice para esta columna?

o no es recomendable tema cerrado?

gracias por la ayuda siempre he tenido dudas hacerca de este tema.

Jorge Vera

Preguntas similare

Leer las respuestas

#1 Leonardo Azpurua
12/06/2008 - 16:57 | Informe spam
"Jorge" escribió en el mensaje
news:4851319f$0$7730$
Bnos Dias .
Tenemos muchas tablas Maestras que cuentan con un campo logico (bit) que
llamamos IsActive (EstaActivo) nos sirve para identificar si un registro
esta activo o a sido borrado, por cuestiones historicas no podemos
eliminar fisicamente el registro.

Cada vez que hacemos una consulta siempre tenemos que poner al final
SELECT
WHERE (Condicion1) AND (condicion2) AND IsActive = 1

Estas son mis preguntas:

Si creo un Indice con multiples columnas es recomendable agregar este
Campo "IsActive"? de ser asi donde deberia colocar el indice? al principio
del indice o al final?

Indice = Campo1,Campo2,IsActive o
Indice = IsActive, Campo1, Campo2

o simplemente debo crear un indice para esta columna?

o no es recomendable tema cerrado?

gracias por la ayuda siempre he tenido dudas hacerca de este tema.



Hola, Jorge:

Si estás a tiempo, lo más razonable sería que crearas para cada tabla con
las características que describes, una Vista del tipo

SELECT * FROM <laTabla> WHERE isActive != 0

y realices todas las operaciones de consulta contra esa vista.

Eso te llevará a un código mucho más simple en tu aplicación.

Salud!
Respuesta Responder a este mensaje
#2 Jorge
12/06/2008 - 17:17 | Informe spam
La mala noticia es que esta aplicacion ya tiene mas de 2 anhos instalada.
y el tiempo de respuesta en las consultas siempre me ha preocupado, por eso
queria saber que mejoras podria realizar en los indices.
pero gracias por el apunte creo que es muy bueno y lo voy a tomar en cuenta
para los proximos disenhos sobretodo para este tipo de situaciones.
Es por algo que existen las vistas no?

"Leonardo Azpurua" <l e o n a r d o [arroba] m v p s [punto] o r g> wrote in
message news:

"Jorge" escribió en el mensaje
news:4851319f$0$7730$
Bnos Dias .
Tenemos muchas tablas Maestras que cuentan con un campo logico (bit) que
llamamos IsActive (EstaActivo) nos sirve para identificar si un registro
esta activo o a sido borrado, por cuestiones historicas no podemos
eliminar fisicamente el registro.

Cada vez que hacemos una consulta siempre tenemos que poner al final
SELECT
WHERE (Condicion1) AND (condicion2) AND IsActive = 1

Estas son mis preguntas:

Si creo un Indice con multiples columnas es recomendable agregar este
Campo "IsActive"? de ser asi donde deberia colocar el indice? al
principio del indice o al final?

Indice = Campo1,Campo2,IsActive o
Indice = IsActive, Campo1, Campo2

o simplemente debo crear un indice para esta columna?

o no es recomendable tema cerrado?

gracias por la ayuda siempre he tenido dudas hacerca de este tema.



Hola, Jorge:

Si estás a tiempo, lo más razonable sería que crearas para cada tabla con
las características que describes, una Vista del tipo

SELECT * FROM <laTabla> WHERE isActive != 0

y realices todas las operaciones de consulta contra esa vista.

Eso te llevará a un código mucho más simple en tu aplicación.

Salud!


Respuesta Responder a este mensaje
#3 Gux (MVP)
12/06/2008 - 20:56 | Informe spam
La recomendación práctica cuando de crear índices compuestos por varias
columnas es que la columna que tiene valores más selectivos sea la primera en
mencionar en el CREATE INDEX.

Ponga la columna IsActive en la última posición de las columnas indizadas.

De todas formas, un análisis más detallado sería recomendable: Use el Tuning
Wizard o revise los planes de ejecución de las peores consultas para tomar
una decisión más afinada.

También revise estas sugerencias de Brad McGehee:

Tips on Optimizing SQL Server Composite Indexes
http://www.sql-server-performance.c...p;type=tip

Gustavo Larriera, Microsoft MVP
http://www.linkedin.com/in/gustavolarriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Jorge" wrote:

Bnos Dias .
Tenemos muchas tablas Maestras que cuentan con un campo logico (bit) que
llamamos IsActive (EstaActivo) nos sirve para identificar si un registro
esta activo o a sido borrado, por cuestiones historicas no podemos eliminar
fisicamente el registro.

Cada vez que hacemos una consulta siempre tenemos que poner al final
SELECT
WHERE (Condicion1) AND (condicion2) AND IsActive = 1

Estas son mis preguntas:

Si creo un Indice con multiples columnas es recomendable agregar este Campo
"IsActive"? de ser asi donde deberia colocar el indice? al principio del
indice o al final?

Indice = Campo1,Campo2,IsActive o
Indice = IsActive, Campo1, Campo2

o simplemente debo crear un indice para esta columna?

o no es recomendable tema cerrado?

gracias por la ayuda siempre he tenido dudas hacerca de este tema.

Jorge Vera



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