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

Czy tablicę PostgreSQL można zoptymalizować pod kątem łączenia?

Nie, przechowywanie FK w tablicy nigdy nie jest dobrym pomysłem dla tabel ogólnego przeznaczenia. Przede wszystkim jest fakt, o którym wspomniałeś wcześniej:Ograniczenia klucza obcego dla elementów tablicy nie są (jeszcze) zaimplementowane. Samo to powinno unieważnić ten pomysł.

Podjęto próbę zaimplementowania funkcji dla Postgres 9.3, która została zatrzymana przez poważne problemy z wydajnością. Zobacz ten wątek na temat hakerów pgsql.

Ponadto, chociaż wydajność odczytu można poprawić za pomocą tablic w niektórych przypadkach użycia, wydajność zapisu spada. Pomyśl o tym:aby wstawić, zaktualizować lub usunąć pojedynczy element z długiej tablicy, musisz teraz napisać nową wersję wiersza z całą tablicą dla każdego przeniesionego elementu. Widzę też poważną rywalizację o blokadę.

Jeśli Twój stół jest tylko do odczytu , pomysł zaczyna nabierać sensu. Ale wtedy rozważyłbym widok zmaterializowany ze zdenormalizowanymi tablicami na górze znormalizowanej implementacji wiele do wielu:

Będąc przy tym, MV może zawierać wszystkie tabele złączeń i tworzyć jedną płaską tabelę, aby uzyskać jeszcze lepszą wydajność odczytu (dla typowych przypadków użycia). W ten sposób uzyskasz integralność referencyjną i dobra wydajność odczytu (i zapisu) - kosztem kosztów ogólnych i dodatkowej pamięci do zarządzania MV.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wstawić wiele wierszy z kluczem obcym przy użyciu CTE w Postgresie?

  2. Identyfikator automatycznego przypisywania Railsów, który już istnieje

  3. Postgresql -- czyszczenie znaczników HTML w środku ciągu

  4. W Railsach, jak mogę zapytać db o zagregowaną liczbę i pogrupować według tygodnia?

  5. Pobieranie pliku z bytea w PostgreSQL za pomocą java