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

Zoptymalizuj tabele PostgreSQL tylko do odczytu

Kolumny używane do filtrowania lub dołączanie (lub, w mniejszym stopniu, sortowanie ) są interesujące dla indeksowania. Kolumny, które zostały właśnie wybrane, są ledwo istotne!Dla następującego zapytania indeksy tylko na a i e może się przydać:

SELECT a,b,c,d
FROM   tbl_a
WHERE  a = $some_value
AND    e < $other_value;

Tutaj, f i prawdopodobnie c też są kandydatami:

SELECT a,b,c,d
FROM   tbl_a
JOIN   tbl_b USING (f)
WHERE  a = $some_value
AND    e < $other_value
ORDER  BY c;

Po utworzeniu indeksów przetestuj, aby sprawdzić, czy są one rzeczywiście przydatne za pomocą EXPLAIN ANALYZE . Porównaj także czasy wykonania z indeksami i bez. Usuwanie i odtwarzanie indeksów jest szybkie i łatwe. Istnieją również parametry do eksperymentu z EXPLAIN ANALYZE . Różnica może być oszałamiająca lub nieistniejąca.
Ponieważ Twoje tabele są tylko do odczytu, utrzymanie indeksu jest tanie. To tylko kwestia miejsca na dysku.

Jeśli naprawdę chcesz wiedzieć, co robisz, zacznij od przeczytania dokumentacji .

Jeśli nie wiesz, jakich zapytań się spodziewać...

  1. Spróbuj zarejestrować wystarczającą liczbę zapytań, aby znaleźć typowe przypadki użycia. Rejestruj zapytania z parametrem log_statement = all za to. Lub po prostu rejestruj powolne zapytania za pomocą log_min_duration_statement .

  2. Utwórz indeksy może to być przydatne i sprawdzić statystyki po pewnym czasie, aby zobaczyć, co faktycznie jest używane. PostgreSQL ma całą infrastrukturę do statystyki monitorowania . Jednym z wygodnych sposobów badania statystyk (i wielu innych zadań) jest pgAdmin gdzie możesz wybrać swoją tabelę / funkcję / indeks i uzyskać wszystkie dane w zakładce "statystyki" w przeglądarce obiektów (okno główne).

  3. Postępuj zgodnie z powyższym opisem, aby sprawdzić, czy używane indeksy rzeczywiście przyspieszają działanie.

  4. Jeśli planer zapytań powinien wybrać jeden lub więcej z Twoich indeksów, ale nie ma to żadnego negatywnego wpływu, prawdopodobnie coś jest nie tak z Twoją konfiguracją i musisz przestudiować podstawy optymalizacji wydajności:próżnia, analiza, parametry kosztów, wykorzystanie pamięci, ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. BŁĄD :Indeks kolumny jest poza zakresem:1, liczba kolumn:0

  2. Jak wykonać kopię zapasową wszystkich db przez pg_dump w pliku wsadowym - postgres

  3. Błąd w LINQ (kolumna nie istnieje) podczas korzystania z Entity Framework

  4. Postgresql zniekształcony literał tablicowy podczas tworzenia agregacji initcond

  5. Knex.js - Jak stworzyć unikalny indeks z klauzulą ​​'gdzie'?