De acuerdo con Craig Ringer :
Si bien generalmente es una buena idea crear un índice en (o incluir) las columnas de clave externa del lado de referencia, no es obligatorio. Cada índice que agrega ralentiza ligeramente las operaciones DML, por lo que paga un costo de rendimiento en cada
INSERT
,UPDATE
oDELETE
. Si el índice se usa raramente, puede que no valga la pena tenerlo.
¿Cómo se determina si el beneficio de agregar un índice supera su costo?
¿Perfila pruebas unitarias antes / después de agregar un índice y verifica una ganancia de rendimiento general? ¿O hay un mejor camino?
pg_stat_user_indexes
ayuda a guiarlo con esto, mostrando información sobre el uso del índice. Para estimar los costos de mantenimiento, puede ver su actividad de escritura en la tabla,pg_stat_user_tables
pero debido a HOT, no todas las actualizaciones necesariamente tendrán que tocar el índice para que pueda sobrestimar un poco.Respuestas:
El uso del índice depende de la estructura de sus datos y la selectividad de sus datos. Si haces consultas de que no las usas, son caras. Si los usa de manera efectiva, son una gran herramienta. Hay un planificador de consultas y análisis de planificador de consultas (
EXPLAIN
) de solo planificación o planificación y ejecución de comandos (EXPLAIN ANALYZE
).Y hay un gran libro en línea: use el índice luke sobre el uso recomendado de índices
fuente
Elija reglas generales y sígalas. Por ejemplo, siempre creo un índice en el lado de referencia de una clave externa.
Asegúrese de probar el rendimiento de su producto con criterios de rendimiento basados en las necesidades del usuario. Por ejemplo, el sistema necesita manejar una carga entrante de 100 solicitudes POST tipo X por minuto.
Si no puede cumplir con sus requisitos de rendimiento, refine su modelo, posiblemente rompiendo sus reglas generales en ese proceso.
fuente