SQL - dzielenie dużego stołu według częstotliwości jego uzyskiwania dostępu? - sql, postgresql

Mam tabelę zawierającą 50 pól:

  1. 10 pól, które prawie zawsze są potrzebne.
  2. 40 pól, które są bardzo rzadko potrzebne.

Z grubsza powiedziałbym, że do pól w (1) należy uzyskać dostęp 1000 razy częściej niż w polach (2).

Czy powinienem podzielić je na dwie tabele z relacją jeden do jednego, czy zachować wszystkie w jednym stole?

Odpowiedzi:

1 dla odpowiedzi № 1

Proces, który opisujesz, jest czasemokreślany jako „podział pionowy”. W skrajności (jedna kolumna na partycję pionową) w ten sposób kolumny danych przechowują dane. Niestety (o ile mi wiadomo) Postgres nie ma obecnie bezpośredniego wsparcia dla partycjonowania pionowego.

Twój pomysł podzielenia danych na dwie tabele jest w porządku. Chciałbym zauważyć, że:

  • Będziesz musiał zmodyfikować zapytania korzystające z dodatkowych kolumn, aby użyć drugiej tabeli. (Możesz owinąć join do widoku, którego używasz, gdy chcesz dodatkowe kolumny).
  • Jeśli obie tabele mają klastrowany klucz podstawowy, który je łączy, to join powinno być naprawdę szybkie.
  • Jeśli wstawiasz / aktualizujesz / usuwasz dane, musisz uważać na synchronizację. Myślę, że poradzisz sobie z tym za pomocą INSTEAD OF wyzwolić widok łączący tabele.
  • Jeśli niektóre rekordy nie mają dodatkowych kolumn, może to być duża wygrana po stronie spacji.
  • Jeśli wszystkie rekordy i wszystkie kolumny zostaną załadowane do pamięci podręcznej, prawdopodobnie nie jest to duża wygrana.

W niektórych przypadkach może to być duża wygrana wydajności. Ale są dodatkowe prace ręczne, aby synchronizować tabele.


0 dla odpowiedzi nr 2

Naprawdę nie ma tu wystarczająco dużo informacji do oszacowania (właściwie nieważne określić ilościowo), jakie mogą być korzyści, ale koszty są bardzo wyraźne - bardziej złożony kod, bardziej złożony schemat, prawdopodobnie większe całkowite wykorzystanie miejsca i narzut wydajności podczas dodawania i usuwania wierszy.

Może nastąpić poprawa wydajnościskanowanie mniejszej ilości danych podczas wykonywania pełnego skanowania tabeli lub ze zwiększonego prawdopodobieństwa znalezienia bloków danych w pamięci, gdy jest to wymagane, i ogólnie mniejszej powierzchni pamięci, ale bez konkretnych informacji o typach często wykonywanych operacji i czy serwer jest pod presją pamięci, nie można udzielić wiarygodnych porad.

Zachowaj ostrożność, aby uczynić swój system bardziej złożonym jako efekt uboczny niepewnych przyrostów wydajności.


Menu