¿Cómo determinar el costo / beneficio de agregar un índice?

10

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, UPDATEo DELETE. 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?

Gili
fuente
pg_stat_user_indexesayuda 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_tablespero debido a HOT, no todas las actualizaciones necesariamente tendrán que tocar el índice para que pueda sobrestimar un poco.
Craig Ringer el
@CraigRinger, eso es muy útil. ¡Gracias!
Gili
Confío en pgBadger casi exclusivamente. Y mis tripas.
Colin 't Hart

Respuestas:

4

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

Mladen Uzelac
fuente
44
La regla general es buena, pero demasiado general en este caso. Estoy buscando una herramienta / medición concreta que sugiera agregar / eliminar índices basados ​​en el comportamiento real de tiempo de ejecución de mi aplicación.
Gili
Tal vez esta es la herramienta que está buscando: enterprisedb.com/products-services-training/products/…
Mladen Uzelac
1

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.

Paso
fuente