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

Come faccio a forzare Postgres a utilizzare un determinato indice?

Supponendo che tu stia chiedendo della funzionalità comune di "suggerimento dell'indice" presente in molti database, PostgreSQL non fornisce tale funzionalità. Questa è stata una decisione consapevole presa dal team di PostgreSQL. Una buona panoramica del perché e di cosa puoi fare invece può essere trovata qui. Le ragioni sono fondamentalmente che si tratta di un hack delle prestazioni che tende a causare più problemi in seguito man mano che i dati cambiano, mentre l'ottimizzatore di PostgreSQL può rivalutare il piano in base alle statistiche. In altre parole, quello che potrebbe essere un buon piano di query oggi probabilmente non sarà un buon piano di query per sempre e gli hint di indice impongono un particolare piano di query per sempre.

Come un martello molto contundente, utile per i test, puoi usare enable_seqscan e enable_indexscan parametri. Vedi:

  • Esame dell'utilizzo dell'indice
  • enable_ parametri

Questi non sono adatti per l'uso in produzione continua . In caso di problemi con la scelta del piano di query, dovresti consultare la documentazione per tenere traccia dei problemi di prestazioni delle query. Non limitarti a impostare enable_ params e allontanati.

A meno che tu non abbia una buona ragione per usare l'indice, Postgres potrebbe fare la scelta giusta. Perché?

  • Per i tavoli piccoli, è più veloce eseguire scansioni sequenziali.
  • Postgres non utilizza gli indici quando i tipi di dati non corrispondono correttamente, potrebbe essere necessario includere cast appropriati.
  • Le impostazioni del pianificatore potrebbero causare problemi.

Vedi anche questo vecchio post del newsgroup.