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
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 |