Nếu bạn chỉ có một số vai trò, bạn thậm chí không lưu bất kỳ bộ nhớ nào không gian trong PostgreSQL . Một integer
cột sử dụng 4 byte, bigint
8 byte. Cả hai đều có thể yêu cầu đệm căn chỉnh:
- Tìm hiểu về kích thước hàng Postgres
- Tính toán và tiết kiệm dung lượng trong PostgreSQL
Một boolean
cột sử dụng 1 byte. Một cách hiệu quả, bạn có thể điều chỉnh bốn hoặc nhiều cột boolean cho một integer
cột, tám hoặc nhiều hơn cho một bigint
.
Cũng tính đến NULL
các giá trị chỉ sử dụng một bit (đơn giản hóa) trong bitmap NULL.
Các cột riêng lẻ dễ đọc hơn và lập chỉ mục . Những người khác đã nhận xét về điều đó.
Bạn vẫn có thể sử dụng chỉ mục trên các biểu thức hoặc chỉ mục một phần để tránh các vấn đề với chỉ mục ("không phân chia được"). Các tuyên bố tổng quát như:
cơ sở dữ liệu không thể sử dụng các chỉ mục trên một truy vấn như thế này
hoặc
Các điều kiện này không phải là SARGable!
không hoàn toàn đúng - có thể đối với một số RDBMS khác thiếu các tính năng này.
Nhưng tại sao lại tránh né khi bạn có thể tránh được hoàn toàn vấn đề?
Như bạn đã làm rõ, chúng ta đang nói về 6 loại riêng biệt (có thể nhiều hơn). Đi với boolean
riêng lẻ cột. Bạn thậm chí có thể tiết kiệm dung lượng so với một bigint
. Yêu cầu về không gian dường như không quan trọng trong trường hợp này.
Nếu những lá cờ này đã loại trừ lẫn nhau , bạn có thể sử dụng một cột của loại enum
hoặc một bảng tra cứu nhỏ và một khóa ngoại tham chiếu đến nó. (Bị loại trong bản cập nhật câu hỏi.)