Nếu bạn chỉ có một vài biến Tôi sẽ cân nhắc việc giữ riêng các cột boolean
riêng biệt.
- Lập chỉ mục dễ dàng. Cụ thể là indexes on expressions và partial indexes.
- Điều kiện truy vấn dễ viết, dễ đọc và có ý nghĩa.
- Cột boolean chiếm 1 byte (không có đệm căn chỉnh). Đối với chỉ một vài biến này chiếm không gian ít nhất.
- Không giống như các tùy chọn khác
boolean
cột cho phép NULL
giá trị cho từng bit nếu bạn cần. Bạn luôn có thể xác định cột NOT NULL
nếu không.
Nếu bạn có nhiều hơn một bàn tay biến đầy đủ nhưng không quá 32, một cột integer
thể phục vụ tốt nhất. (Hoặc một bigint
cho lên tới 64 biến.)
- Chiếm 4 byte trên đĩa (có thể yêu cầu sự liên kết đệm, tùy thuộc vào cột trước).
- Lập chỉ mục rất nhanh để đối sánh chính xác (nhà điều hành
=
).
- Xử lý các giá trị riêng lẻ có thể chậm hơn/ít thuận tiện hơn với
varbit
hoặc boolean
.
Với nhiều biến hơn, hoặc nếu bạn muốn thao tác các giá trị rất nhiều hoặc nếu bạn không có bảng lớn hoặc dung lượng ổ đĩa/RAM không phải là vấn đề hoặc nếu bạn không chắc chắn nên chọn gì , Tôi sẽ xem xét bit(n)
or bit varying(n)
(short: varbit(n)
.
Đối với chỉ 3 bit thông tin, cá nhân boolean
cột nhận được bởi với 3 byte, một integer
nhu cầu 4 byte (có thể thêm liên kết đệm) và một bit string
6 byte (5 + 1).
Đối 32 bit thông tin, một integer
vẫn cần 4 byte (+ đệm), một bit string
chiếm 9 byte cho cùng một (5 + 4) và boolean
cột chiếm 32 byte.
Để tối ưu hóa không gian đĩa hơn nữa, bạn cần hiểu cơ chế lưu trữ của PostgreSQL, đặc biệt là căn chỉnh dữ liệu. More in this related answer.
This answer về cách chuyển đổi các loạiboolean, bit (n) và nguyên có thể giúp đỡ, quá.
Nguồn
2012-04-03 12:45:07
Cảm ơn rất nhiều vì đã giải thích, đó chính xác là những gì tôi cần! Tôi nghĩ rằng tôi sẽ đi với một cột 'số nguyên'. –