postgres index ejemplos drop create postgresql indexing gin gist-index

drop - create index postgresql ejemplos



PostgreSQL: ¿índices GIN o GiST? (1)

En primer lugar, ¿necesita usarlos para indexar la búsqueda de texto? GIN y GiST están especializados en índices para algunos tipos de datos. Si necesita indexar valores de caracteres simples o enteros, entonces el índice normal de B-Tree es el mejor.
De todos modos, la documentación de PostgreSQL tiene un capítulo sobre GIST y otro sobre GIN , donde puedes encontrar más información.
Y, por último, la mejor manera de encontrar cuál es mejor es generar datos de muestra (tanto como se necesita para ser un escenario real) y luego crear un índice GIST, midiendo cuánto tiempo se necesita para crear el índice, inserte un nuevo valor, ejecute una consulta de muestra. A continuación, suelte el índice y haga lo mismo con un índice GIN. Compare los valores y obtendrá la respuesta que necesita, según sus datos.

A partir de la información que pude encontrar, ambos resuelven los mismos problemas: operaciones más esotéricas como la contención e intersección de matrices (&&, @>, <@, etc.). Sin embargo, me interesaría recibir consejos sobre cuándo usar uno u otro (o posiblemente ninguno).
La documentación de PostgreSQL tiene algo de información sobre esto:

  • Las búsquedas del índice GIN son aproximadamente tres veces más rápidas que GiST
  • Los índices GIN tardan aproximadamente tres veces más en construirse que GiST
  • Los índices GIN son aproximadamente diez veces más lentos de actualizar que GiST
  • Los índices GIN son dos o tres veces más grandes que GiST

Sin embargo, me interesaría especialmente saber si hay un impacto en el rendimiento cuando la cantidad de memoria a índice comienza a ser pequeña (es decir, el tamaño del índice es mucho mayor que la memoria disponible). Me han dicho en el canal de IRC #postgresql que GIN necesita mantener todo el índice en la memoria, de lo contrario no será efectivo, porque, a diferencia de B-Tree, no sabe qué parte leer desde el disco para una consulta particular? La pregunta sería: ¿es esto cierto (porque también me han dicho lo contrario de esto)? GiST tiene las mismas restricciones? ¿Hay otras restricciones de las que debería tener conocimiento al usar uno de estos algoritmos de indexación?