Pregunta

He estado trabajando en la optimización de bases de datos PostgreSQL mi recientemente, y tradicionalmente, sólo he usan índices de árbol B. Sin embargo, he visto que los índices GiST SuPort no únicos, índices de varias, en la documentación de PostgreSQL 8.3.

No podría, sin embargo, veo cuál es la diferencia real entre ellos es. Tenía la esperanza de que mis compañeros de codificadores podrían beable para explicar, lo que los pros y los contras entre ellos son, y lo más importante, las razones por las que usarían uno sobre el otro?

¿Fue útil?

Solución

En pocas palabras: los índices de árbol B se desempeñan mejor, pero los índices GIST son más flexibles. Por lo general, usted quiere índices de árbol B si funcionarán para su tipo de datos. Hubo un post reciente en la PG enumera alrededor de un enorme impacto en el rendimiento para el uso de índices GIST; que se espera que sea más lento que los árboles B (tal es el precio de la flexibilidad), pero no que mucho más lento ... el trabajo es, como era de esperar, en curso.

un mensaje por Tom Lane, , un núcleo de PostgreSQL desarrollador:

  

El punto principal de GIST es ser capaz de consultas de índice que simplemente están   no indexable en árbolB. ... Uno lo haría totalmente   esperan árbolB para vencer a los GIST para los casos btree indexables. Pienso que el   punto significativo aquí es que está ganando por un factor de una pareja   cien; eso es bastante horrible, y podría señalar alguna implementación   problema.

Otros consejos

Básicamente todo el mundo de la derecha - es árbolB índice por defecto, ya que funciona muy bien. GiST son algo diferentes animales - que es más de un "marco para escribir los tipos de índices" de un tipo de índice por sí sola. Usted tiene que agregar código personalizado (en el servidor) para usarlo, pero por otro lado - que son muy flexibles

.

En general - no se utiliza de GiST a menos que el tipo de datos que está utilizando le diga que lo haga. Ejemplo de tipos de datos que utilizan GiST:. Ltree (de contrib), tsvector (contrib / tsearch hasta 8,2, en el núcleo desde 8,3), y otros

No es bien conocido, y bastante rápido extenstion geográfica a PostgreSQL - PostGIS ( http://postgis.refractions.net/ ) que utiliza GiST para sus propósitos.

índices GIST son pérdidas en cierta medida, lo que significa que el DBMS tiene que lidiar con los falsos positivos / negativos, es decir:.

  

índices TEGI son con pérdidas porque cada documento está representado en el índice por un fijo   firma longitud. La firma es   generada por hashing cada palabra en una   bit aleatorio en una cadena de n bits, con   todos estos bits o-ed juntos para   producir una firma de documentos de n bits.   Cuando dos palabras hash al mismo bit   posición habrá una falsa coincidencia.   Si todas las palabras en la consulta tienen coincidencias   (Verdadera o falsa), entonces la fila de la tabla   debe ser recuperada para ver si el partido   es correcto.   Los árboles B no tienen este comportamiento, así que dependiendo de los datos que se están indexados, puede haber alguna diferencia de rendimiento entre los dos.

Véase por el comportamiento de búsqueda de texto http: //www.postgresql. org / docs / 8,3 / static / TEXTSEARCH-indexes.html y http://www.postgresql.org/docs/8.3/static/indexes-types.html para una comparación de propósito general.

GiST son los índices más generales. Puede utilizarlos con fines más amplios que los que utilizarían con B-Tree. Incluyendo la capacidad de construir un árbol B usando Gist.

IE: se puede usar GiST al índice en puntos geográficos o áreas geográficas, algo que no será capaz de ver con índices de árbol B, ya que lo único que importa en un árbol B es la clave (o teclas) que está indexando sucesivamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top