PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Ottimizzazione delle query Postgres (forzando una scansione dell'indice)

Per test scopi puoi forzare l'uso dell'indice "disabilitando" le scansioni sequenziali - meglio solo nella tua sessione corrente:

SET enable_seqscan = OFF;

non usalo su un server produttivo. Dettagli nel manuale qui.

Ho citato "disabilitazione", perché non è possibile disabilitare effettivamente le scansioni sequenziali della tabella. Ma qualsiasi altra opzione disponibile è ora preferibile per Postgres. Questo dimostrerà che l'indice multicolonna su (metric_id, t) può essere utilizzato - solo non efficace come un indice sulla colonna principale.

Probabilmente otterrai risultati migliori cambiando l'ordine delle colonne nella tua PRIMARY KEY (e l'indice utilizzato per implementarlo dietro le quinte con esso) a (t, metric_id) . Oppure creane un aggiuntivo indice con colonne invertite del genere.

  • Un indice composito va bene anche per le query sul primo campo?

Normalmente non è necessario forzare piani di query migliori mediante l'intervento manuale. Se si imposta enable_seqscan = OFF porta a un molto piano migliore, probabilmente qualcosa non va nel tuo database. Considera questa risposta correlata:

  • Impedisci a PostgreSQL di scegliere a volte un piano di query errato