PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Dung lượng đĩa cần thiết để lưu trữ giá trị NULL bằng cách sử dụng postgresql DB?

Laramie nói đúng về bitmap và anh ấy liên kết đến đúng nơi trong sách hướng dẫn. Tuy nhiên, điều này gần như đúng, nhưng không hoàn toàn chính xác:

Vì vậy, đối với bất kỳ hàng nhất định nào có một hoặc nhiều null, kích thước được thêm vào đó sẽ là kích thước của bitmap (N bit cho bảng N-cột, được làm tròn lên).

Một yếu tố trong việc liên kết dữ liệu. HeapTupleHeader (mỗi hàng) dài 23 byte, dữ liệu cột thực tế luôn bắt đầu bằng bội số của MAXALIGN (thường là 8 byte). Điều đó để lại một byte đệm có thể được sử dụng bởi bitmap rỗng. Trên thực tế, Bộ nhớ NULL hoàn toàn miễn phí cho các bảng có tối đa 8 cột .

Sau đó, một MAXALIGN khác (thường là 8) byte được phân bổ cho MAXALIGN * 8 tiếp theo (thường là 64) cột. Vv. Luôn cho tổng số cột người dùng ( tất cả hoặc không có gì ). Nhưng chỉ khi có ít nhất một giá trị NULL thực tế trong hàng.

Tôi đã chạy thử nghiệm rộng rãi để xác minh tất cả những điều đó. Thêm chi tiết:

  • Không sử dụng NULL trong PostgreSQL vẫn sử dụng bitmap NULL trong tiêu đề?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kết hợp các kết quả từ hai cơ sở dữ liệu riêng biệt

  2. Chia cột thành nhiều hàng trong Postgres

  3. Cài đặt Odoo trên Mac Không thể Thực thi Lệnh LESSC

  4. Lập bản đồ mảng với Hibernate

  5. Heroku Postgres:psql:FATAL:không có mục nhập pg_hba.conf cho máy chủ