Version 3 (modified by JP, 6 years ago)

--

Optymalizacja zapytań PostgreSQL

Zasady:

  1. Unikaj podzapytań. Zamiast tego wybieraj dane za pomocą JOIN-ów
  1. Najmniejsza tabela pierwsza (lub taka na której warunek jest najbardziej efektywny)

Testowanie zapytań

Dla 20 jednoczesnych klientów, używając 4 wątków, przez maksymalnie 300 sec wykonuj zapytanie zawarte w pliku:

edokumenty$ pgbench -c20 -T300 -j4 -f tests/query.sql edokumenty -p5432

Przykłady

Przykład nr 1

-- Przed
SELECT t1.id, a, b, c,
 (SELECT d FROM table2 t2 WHERE t2.id = t1.id) AS d
  FROM table t1;

-- Po
SELECT t1.id, a, b, c, t2.d
  FROM table t1
  INNER JOIN t2 ON t1.id = t2.id

Instrukcje dla optymalizatora

Instrukcja dla optymalizatora za pomocą GUC (Grand Unified Configuration), które może zadeklarować np. przed wykonaniem zapytania.

-- Zwiększ zasoby procesora dla zapytania
SET cpu_table_cost = 0.15;
-- Nie przestawiaj ani nie sprawdzaj kolejności tabel: 
SET join_collapse_limit = 1;
-- 
SET enable_nestloop = FALSE;
-- 
SET enable mergejoin = FALSE;