PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Apakah tidak menggunakan NULL di PostgreSQL masih menggunakan bitmap NULL di header?

Ini sebenarnya lebih kompleks dari itu.

Bitmap nol membutuhkan satu bit per kolom di baris, dibulatkan ke byte penuh. Itu hanya ada jika baris aktual menyertakan setidaknya satu nilai NULL dan sepenuhnya dialokasikan dalam kasus itu. NOT NULL kendala tidak secara langsung mempengaruhi itu. (Tentu saja, jika semua bidang tabel Anda NOT NULL , tidak akan pernah ada bitmap nol.)

"Heap Tuple header" (per baris) panjangnya 23 byte. Data sebenarnya dimulai pada kelipatan MAXALIGN (Penyelarasan data maksimum ) setelah itu, yang biasanya 8 byte pada OS 64-bit (4 byte pada OS 32-bit). Jalankan perintah berikut dari direktori biner PostgreSQL Anda sebagai root untuk mendapatkan jawaban yang pasti:

./pg_controldata /path/to/my/dbcluster

Pada penginstalan Postgres 12 berbasis Debian pada umumnya adalah:

sudo /usr/lib/postgresql/12/bin/pg_controldata /var/lib/postgresql/12/main

Either way, ada satu byte gratis antara header dan awal data yang selaras, yang dapat dimanfaatkan oleh bitmap nol. Selama tabel Anda memiliki 8 kolom atau kurang , penyimpanan NULL secara efektif benar-benar gratis (sejauh menyangkut ruang disk).

Setelah itu, MAXALIGN lagi (biasanya 8 byte) dialokasikan untuk bitmap nol untuk mencakup (biasanya) 64 bidang lainnya. dll.

Ini berlaku untuk setidaknya versi 8.4 - 12 dan kemungkinan besar tidak akan berubah.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana make_timestamptz() Bekerja di PostgreSQL

  2. instalasi instace tunggal postgresql

  3. UPPER() – Konversikan ke Huruf Besar di PostgreSQL

  4. Permintaan yang tepat untuk mendapatkan jumlah koneksi saat ini di DB PostgreSQL

  5. Menyetel batas waktu koneksi dengan PDO