Porque el motor de PostgreSQL (al igual que el de Oracle), cuando el indice es compuesto, hace una busqueda, usando el indice, por el primer y por el segundo campo o solo por el primer campo. Es decir para usar tu indice debes buscar por todos los campos del indice o solo por el primero.
>________________________________ > De: Daymel Bonne Solís <dbo...@uci.cu> >Para: pgsql-es <pgsql-es-ayuda@postgresql.org> >Enviado: Sábado 25 de febrero de 2012 17:28 >Asunto: [pgsql-es-ayuda] Duda acerca de la búsqueda por índice > >Hola > >Tengo una duda de cuando postgres realiza una búsqueda por Ãndice. > >test=# \d foo > Tabla «public.foo» >Columna | Tipo | Modificadores >---------+---------+--------------- >unique1 | integer | >unique2 | integer | >Ã�ndices: > "fooi" btree (unique1, unique2) > >Si realizo una búsqueda filtrando por la columna unique2 realiza una >búsqueda secuencial. > >test=# explain select * from foo where unique2 in (1,2,3); > QUERY PLAN >----------------------------------------------------- >Seq Scan on foo (cost=0.00..182.50 rows=3 width=8) > Filter: (unique2 = ANY ('{1,2,3}'::integer[])) >(2 filas) > >Sin embargo si filtro por la columna unique1 la búsqueda se realiza por >Ãndice. > >test=# explain select * from foo where unique1 in (1,2,3); > QUERY PLAN >---------------------------------------------------------------------- >Index Only Scan using fooi on foo (cost=0.00..20.32 rows=3 width=8) > Index Cond: (unique1 = ANY ('{1,2,3}'::integer[])) >(2 filas) > >¿Porqué ambas búsquedas no realizan utilizando el Ãndice? > >Saludos. > > > >Fin a la injusticia, LIBERTAD AHORA A NUESTROS CINCO COMPATRIOTAS QUE SE >ENCUENTRAN INJUSTAMENTE EN PRISIONES DE LOS EEUU! >http://www.antiterroristas.cu >http://justiciaparaloscinco.wordpress.com >- >Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org) >Para cambiar tu suscripción: >http://www.postgresql.org/mailpref/pgsql-es-ayuda > > >