Come determinare il costo / beneficio dell'aggiunta di un indice?


10

Secondo Craig Ringer :

Sebbene di solito sia una buona idea creare un indice su (o includere) le colonne di chiave esterna sul lato di riferimento, non è necessario. Ogni indice che aggiungi rallenta leggermente le operazioni DML, quindi paghi un costo di rendimento su ogni INSERT, UPDATEo DELETE. Se l'indice viene utilizzato raramente, potrebbe non valerne la pena.

Come si determina se il vantaggio di aggiungere un indice supera il suo costo?

Profili i test unitari prima / dopo l'aggiunta di un indice e verifichi un aumento complessivo delle prestazioni? O c'è un modo migliore?


pg_stat_user_indexesti guida in questo, mostrando informazioni sull'utilizzo dell'indice. Per stimare i costi di manutenzione è possibile esaminare l'attività di scrittura della tabella, pg_stat_user_tablesma a causa di CALDO, non tutti gli aggiornamenti dovranno necessariamente toccare l'indice, quindi è possibile sopravvalutare un po '.
Craig Ringer,

@CraigRinger, è molto utile. Grazie!
Gili,

Mi affido a pgBadger quasi esclusivamente. E il mio istinto.
Colin 't Hart,

Risposte:


4

L'utilizzo dell'indice dipende dalla struttura dei dati e dalla selettività dei dati. Se fai domande che non le usi sono costose. Se li usi in modo efficace, sono un ottimo strumento. Esiste un planner di query e analytics di planner di query ( EXPLAIN) della sola pianificazione o pianificazione ed esecuzione dei comandi ( EXPLAIN ANALYZE).

E c'è un ottimo libro online: usa l'indice luke sull'uso raccomandato degli indici


4
La regola dei pollici è buona, ma troppo generica in questo caso. Sto cercando uno strumento / misura concreta che suggerirà di aggiungere / rimuovere indici in base al comportamento runtime effettivo della mia applicazione.
Gili,

Forse questo è lo strumento che stai cercando: enterprisedb.com/products-services-training/products/…
Mladen Uzelac

1

Scegli le regole pratiche e seguile. Ad esempio, creo sempre un indice sul lato di riferimento di una chiave esterna.

Assicurati di testare le prestazioni del tuo prodotto rispetto ai criteri di prestazione in base alle esigenze degli utenti. Ad esempio, il sistema deve gestire un carico in entrata di 100 richieste POST di tipo X al minuto.

Se non è possibile soddisfare i requisiti di prestazione, perfezionare il modello, eventualmente infrangendo le regole empiriche in tale processo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.