PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgresql - Zapytanie działa dużo szybciej z enable_nestloop=false. Dlaczego planista nie postępuje właściwie?

Jeśli planista zapytań wybierze nieoptymalne plany zapytań, prawdopodobnie ma niekompletne lub wprowadzające w błąd informacje.

Zobacz tę stronę Wiki PostgreSQL na strojenie serwera. Zwróć szczególną uwagę na rozdziały dotyczące random_page_cost i default_statistics_target .
Przeczytaj również odpowiednie rozdziały w podręczniku Statystyki Używane przez planistę i Stałe kosztów planowania .

Dokładniej, może to pomóc w zwiększeniu statistics target dla następujących kolumn:

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;

Są one zaangażowane w filtry, których wynikiem jest

Jest więcej . Sprawdź każdą kolumnę, w której strugarka znacznie odbiega od oszacowania. Wartość domyślna to tylko 100. Ma sens tylko w przypadku tabel z>> 1000 wierszy. Poeksperymentuj z ustawieniem. Uruchom ANALYZE na stołach później, aby zmiany zaczęły obowiązywać.

Pomocne może być również utworzenie częściowego indeksu w postgres(sales_orders.retailer_id) WHERE retailer_id IS NOT NULL (w zależności od tego, jak powszechne są wartości NULL).

Inną rzeczą, która może ci pomóc, jest uaktualnienie do najnowszej wersji 9.1. W tym obszarze wprowadzono szereg istotnych ulepszeń.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można usunąć bazy danych

  2. Jak make_timestamp() działa w PostgreSQL

  3. Jak mogę się upewnić, że widok zmaterializowany jest zawsze aktualny?

  4. Jak zrobić poprawny upsert za pomocą sqlalchemy na postgresql?

  5. Daty szesnastkowe firmy Microsoft