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

Ile miejsca na dysku potrzeba do przechowywania wartości NULL przy użyciu postgresql DB?

Laramie ma rację co do bitmapy i odwołuje się do odpowiedniego miejsca w instrukcji. Jednak jest to prawie, ale nie do końca poprawne:

Tak więc dla dowolnego wiersza z jedną lub większą liczbą wartości null, dodany do niego rozmiar będzie równy rozmiarowi mapy bitowej (N bitów dla tabeli N-kolumnowej, zaokrąglone w górę).

Trzeba wziąć pod uwagę wyrównanie danych. HeapTupleHeader (na wiersz) ma długość 23 bajtów, rzeczywiste dane w kolumnie zawsze zaczynają się od wielokrotności MAXALIGN (zwykle 8 bajtów). Pozostaje jeden bajt dopełnienia, który może być wykorzystany przez bitmapę zerową. W efekcie przechowywanie NULL jest całkowicie bezpłatne dla tabel do 8 kolumn .

Następnie kolejny MAXALIGN (zwykle 8) bajtów jest przydzielanych na następne MAXALIGN * 8 (zazwyczaj 64) kolumny. Itd. Zawsze dla łącznej liczby kolumn użytkowników (wszystko albo nic ). Ale tylko wtedy, gdy w wierszu jest co najmniej jedna rzeczywista wartość NULL.

Przeprowadziłem obszerne testy, aby to wszystko zweryfikować. Więcej szczegółów:

  • Czy nie używasz NULL w PostgreSQL nadal używa bitmapy NULL w nagłówku?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Łączenie wyników z dwóch oddzielnych baz danych

  2. Jak sprawdzić, czy wyzwalacz istnieje w PostgreSQL?

  3. Jak Atanh() działa w PostgreSQL

  4. lastInsertId nie działa w Postgresql

  5. Wyświetlanie obrazu w IReports przy użyciu PostgreSql