[Pgsql-ayuda] buena indexacion

Alvaro Herrera alvherre@dcc.uchile.cl
Fri, 8 Aug 2003 15:50:06 -0400


On Thu, Aug 07, 2003 at 12:06:07PM -0300, Martin Marques wrote:
> Quisiera saber si hay documentacion de como indexar correctamente mis tablas, 
> especialmente con consultas que tienen condiciones sobre multiples columnas.
> 
> Digamos, una duda que tengo es si el orden de las columnas es importante o no.

Hmmm... no estoy seguro de si entiendo la pregunta.  Si tienes una tabla
blah (a, b, c, d)

y tienes un indice
idx_blah on blah (a, b, c)

Ese indice se puede usar en:
select * from blah where a=... AND b=... AND c=...
select * from blah where a=... AND b=...
select * from blah where a=...
(tambien en consultas de rangos, o sea a<10 and a>5, incluso varios
campos)

NO se puede usar en
select * from blah where b=... AND a=...
select * from blah where b=...

Si tienes un ejemplo mas concreto, seria mejor.

Ojo, cuando tienes una clausula ORDER BY puede haber diferencias
significativas.  Por ej. es mucho mejor
select * from blah where a=... and b=... order by a,b,c
que
select * from blah where a=... and b=... order by c

(mira los EXPLAIN y EXPLAIN ANALYZE, deberia ser mas o menos obvio --
hay un paso de SORT si el indice no entrega los resultados en el orden
correcto, y ademas hay un paso innecesario de sort si omites las
columnas en el ORDER BY por creer que es suficiente con restringirlos en
la clausula WHERE)

-- 
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"Amanece.                                         (Ignacio Reyes)
El Cerro San Cristóbal me mira, cínicamente, con ojos de virgen"