Re: Diferencia entre indices btree, rtree y hash

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: BhEaN <listas(at)bhean(dot)com>
Cc: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Diferencia entre indices btree, rtree y hash
Date: 2009-05-18 16:09:00
Message-ID: 20090518160900.GE10339@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

BhEaN escribió:
> Hola a todos,
>
> Tengo una BBDD en PostgreSQL que va a contener varios millones de
> registros, por lo que necesito optimizar las consultas lo máximo
> posible...
>
> Mi problema es que, a la hora de crear los indices, no puedo crear un
> indice (tipo BTREE) en una de las columnas, porque algunos de los
> registros que hay en ella tienen una longitud mayor a la que permite el
> indice (creo recordar que 2000 y pico... no demasiado...)
>
> He buscado documentación acerca de los tipos de indices existentes, pero
> no me queda nada claro sus diferencias y caracteristicas. Hasta ahora
> siempre había usado indices BTREE, pero nunca me habia parado a pensar
> en las diferencias que tendrian estos indices con RTREE o HASH, y ahora
> que me veo obligado a usar otro tipo distinto a BTREE, no se si al crear
> el indice HASH (por ejemplo) las consultas serán mas lentas, o habrá
> alguna penalización....
>
> Podrías indicarme las caracteristicas y/o diferencias entre estos tipos
> de índices de PostgreSQL, o decirme donde encontrar información CLARA al
> respecto? (ya leí en la documentacion oficial, y no consigo sacar
> conclusiones)

rtree ya no existe. Fue reemplazado por GiST ("generalized search
tree"), el cual es un sistema de indexamiento para tipos complicados --
por ej. se usa para indexar tipos geométricos y también para los índices
de búsqueda en texto, entre muchas otras cosas.

El otro sistema de indexamiento extravagante es GIN; es un índice
invertido. También se usa para búsqueda en texto (es más rápido en
búsquedas que GiST, pero mucho más lento para agregar nuevos valores).
Se puede usar para otras cosas también obviamente.

Hash es un tipo de índice que en Postgres no es recomendable por el
momento, así que no lo uses porque tiene varios problemas.

Así que tu única alternativa es el btree. Dado que no puedes almacenar
más de 2000 y pico caracteres, vas a tener que buscar mecanismos
alternativos. Si quieres indexar campos grandes de texto, ¿quizás lo que
necesitas en realidad es usar el sistema de búsqueda en texto? Te
podemos dar consejos más específicos si nos dices exactamente de qué
naturaleza son los datos y cómo serán las consultas.

--
Alvaro Herrera http://www.advogato.org/person/alvherre
"Sallah, I said NO camels! That's FIVE camels; can't you count?"
(Indiana Jones)

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2009-05-18 16:13:45 Re: Consulta No se puede instalar postgres
Previous Message Mariano Reingart 2009-05-18 16:04:41 Re: copiar carpeta