Re: Otra acerca de indices

From: "Juan P(dot) Aviles" <jputem(at)yahoo(dot)es>
To: Alvaro Herrera <alvherre(at)surnet(dot)cl>
Cc: lista postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Otra acerca de indices
Date: 2005-07-01 00:24:30
Message-ID: 20050701002430.6357.qmail@web26202.mail.ukl.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Ahora, si las consulta con estado_tit=true son muy frecuentes, y las
consultas con estado_tit=false son raras, y ademas los WHERE contienen
el tipo_tit, entonces te puede convenir un indice asi:

CREATE INDEX foo_bar on titular (tipo_tit) WHERE estado_tit = true;
esto te sirve cuando hagas estas consultas
SELECT * from titular WHERE tipo_tit=X and estado_tit=true
pero no esta
SELECT * from titular WHERE tipo_tit=X and estado_tit=false

Obviamente si haces un indice con estado_tit=true y otro con
estado_tit=false nuevamente estas perdiendo, y te conviene un solo
indice asi
CREATE INDEX foo_bar on titular (tipo_tit)

A ver si entendi, basicamente necesito estos indices para definir filtros de seleccion de titulares,
me explico por ejemplo en una interfaz cliente tengo una casilla de texto que me ingresa o una parte del rut o
una parte del nombre de una persona, y mando a consultar asi

Select * from titular where tipo_tit = 1 and nom_tit = 'Perico ' and estado_tit = True;

O

Select * from titular where tipo_tit = 1 and rut_tit = 'xxx' and estado_tit = True;

con los ilike o like y un limit 100, correspondientes por supuesto, los omiti para resaltar el asunto de los indices, ¿porque no influyen en ellos cierto???.

Bueno, para esto necesitaria indices del tipo

CREATE INDEX foo_bar1 on titular (tipo_tit , nom_tit) WHERE estado_tit = true;

y otro

CREATE INDEX foo_bar2 on titular (tipo_tit , rut_tit) WHERE estado_tit = true;

Entendi?????? :)

Otra cosa a tener en cuenta es que si tienes un indice

CREATE INDEX foo_bar on titular (rut_tit, tipo_tit, estado_tit)

entonces ese indice se puede usar para estas dos consultas:

SELECT * from titular WHERE rut_tit=X and tipo_tit=Y and estado_tit=Z

y

SELECT * from titular WHERE rut_tit=X and tipo_tit=Y

es decir no necesitas que en el WHERE aparezcan todas las columnas que
se mencionan en el indice.

Esta era una duda que tenia hace tienpo!!!!!!!!

Eso es lo que te puede aportar mi experiencia. Ojala te sirva.

Simpre tus comentarios son de gran ayuda al igual que los de todos en esta lista, Se Agradece

Juan Pablo Aviles


---------------------------------

Correo Yahoo!
Comprueba qué es nuevo, aquí
http://correo.yahoo.es

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2005-07-01 01:04:39 Re: Otra acerca de indices
Previous Message Luis Alfonso Cañas Triana 2005-07-01 00:07:41 Fw: Uso de left join