Se il pianificatore di query sceglie piani di query non ottimali, è probabile che disponga di informazioni incomplete o fuorvianti con cui lavorare.
Vedi questa pagina Wiki di PostgreSQL
sull'ottimizzazione del server. Presta particolare attenzione ai capitoli su random_page_cost e obiettivo_statistico_predefinito .
Leggi anche i capitoli corrispondenti nel manuale su Statistiche Utilizzato dal pianificatore
e Costanti del pianificatore .
Più specificamente, potrebbe aiutare ad aumentare il statistics target
per le seguenti colonne:
ALTER TABLE postgres.products ALTER COLUMN id SET STATISTICS 1000;
ALTER TABLE postgres.sales_orders ALTER COLUMN retailer_id SET STATISTICS 1000;
ALTER TABLE postgres.sales_orders ALTER COLUMN company_id SET STATISTICS 1000;
ALTER TABLE goods_return_notes ALTER COLUMN retailer_id SET STATISTICS 1000;
ALTER TABLE goods_return_notes ALTER COLUMN company_id SET STATISTICS 1000;
ALTER TABLE retailer_category_leaf_nodes ALTER COLUMN tree_left SET STATISTICS 1000;
ALTER TABLE channels ALTER COLUMN principal_id SET STATISTICS 1000;
Questi sono coinvolti nei filtri risultanti nel
Ce ne sono di più . Controllare ogni colonna in cui la pialla si discosta molto dal preventivo. Il valore predefinito è solo 100. Ha senso solo per le tabelle con>> 1000 righe. Sperimenta con l'impostazione. Esegui ANALYZE
successivamente sui tavoli affinché le modifiche abbiano effetto.
Potrebbe anche essere utile creare un indice parziale su postgres(sales_orders.retailer_id) WHERE retailer_id IS NOT NULL
(a seconda di quanto sono comuni i valori NULL).
Un'altra cosa che potrebbe aiutarti è aggiornare all'ultima versione 9.1. Sono stati apportati numerosi miglioramenti sostanziali in questo settore.