ver uso tutorial tipos reconstruir index español ejemplos create crear performance postgresql indexing

performance - tutorial - uso de indices en oracle



Forma más eficiente de crear un índice en Postgres (1)

Su observación es correcta: es mucho más eficiente cargar datos primero y solo luego crear índices. La razón de esto es que las actualizaciones de índice durante el inserto son costosas. Si crea un índice después de que todos los datos estén allí, es mucho más rápido.

Va aún más lejos: si necesita importar una gran cantidad de datos en la tabla indexada existente, a menudo es más eficiente soltar primero el índice existente, importar los datos y luego volver a crear el índice.

Una desventaja de crear un índice después de la importación es que la tabla debe estar bloqueada, y eso puede llevar mucho tiempo (no se bloqueará en el escenario opuesto). Sin embargo, en PostgreSQL 8.2 y posterior, puede usar CREATE INDEX CONCURRENTLY , que no bloquea la tabla durante la indexación (con algunas advertencias).

¿Es más eficiente crear un índice después de completar los datos o antes, o no importa?

Por ejemplo, supongamos que tengo 500 archivos para cargar en una base de datos de Postgres 8.4. Aquí están los dos escenarios de creación de índice que podría usar:

  1. Crear índice cuando se crea la tabla, luego cargar cada archivo en la tabla; o
  2. Crear índice después de que todos los archivos se hayan cargado en la tabla.

Los datos de la tabla en sí son aproximadamente 45 Gigabytes. El índice es de aproximadamente 12 Gigabytes. Estoy usando un índice estándar. Se crea así:

CREATE INDEX idx_name ON table_name (column_name);

Mi carga de datos usa COPIA DE .

Una vez que se carguen todos los archivos, no se producirán actualizaciones, eliminaciones o cargas adicionales en la mesa (es un día de datos que no cambiará). Entonces, quería preguntar qué escenario sería más eficiente. Las pruebas iniciales parecen indicar que cargar todos los archivos y luego crear el índice (escenario 2) es más rápido, pero no hice una comparación científica de los dos enfoques.