Một số người cố gắng tránh NULL
, xác nhận logic sẽ khó hiểu.
Tôi không phải là một trong số họ. NULL
giá trị chỉ tốt cho các cột không có dữ liệu. Chúng chắc chắn là cách rẻ nhất để lưu trữ các cột "trống" - cho không gian đĩa cũng như hiệu suất (tác động chính là các bảng và chỉ số nhỏ hơn):
- Không sử dụng NULL trong PostgreSQL vẫn sử dụng bitmap NULL trong tiêu đề?
- Việc đặt" NOT NULL "trên một cột trong postgresql có làm tăng hiệu suất không?
- Các cột rỗng có chiếm thêm không gian không trong PostgreSQL?
Sau khi bạn hiểu bản chất của NULL
không có lý do gì để tránh chúng. Postgres cung cấp nhiều chức năng khác nhau để đối phó với NULL. colaesce()
, nullif()
, concat()
, concat_ws()
, ...
Nói chung, theo hiệu suất có liên quan, một ràng buộc KHÔNG ĐẦY ĐỦ vượt qua ràng buộc KIỂM TRA và cả hai đều đánh bại trình kích hoạt bằng cách bắn nhật ký. Nhưng ngay cả những bộ kích hoạt đơn giản cũng rẻ. Chi phí của một NOT NULL
hạn chế là bên cạnh không có gì. Ngoài ra, tất cả những điều này chỉ ảnh hưởng đến hoạt động ghi, nhưng trong hầu hết các ứng dụng, hoạt động đọc chiếm ưu thế.
Do đó, tác động có liên quan nhất đến hiệu suất (bỏ qua các chỉ số và truy vấn dưới mức tối ưu) là kích thước bảng và chỉ số hoặc quan trọng hơn là số bộ giá trị trên mỗi trang dữ liệu . Bộ giá trị lớn hơn dẫn đến hiệu suất chậm hơn cho hầu hết các trường hợp sử dụng. Số lượng trang dữ liệu phải được đọc để đáp ứng một truy vấn tăng lên tương ứng. Bộ nhớ đệm có sẵn đã bão hòa trước đó.
Tôi chưa chuẩn bị sẵn điểm chuẩn, nhưng tốt nhất là bạn nên kiểm tra môi trường cụ thể của mình. Đây chỉ là những quy tắc đơn giản của ngón tay cái. Thực tế phức tạp hơn rất nhiều.