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

Chi phí của các ràng buộc KIỂM TRA trong Postgres 9.x là bao nhiêu?

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):

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thử nghiệm Mocha PostgreSQL với Knex đang cho tôi lỗi MigrationLocked

  2. Kiểm tra các hàng trùng lặp hoàn chỉnh trong một bảng lớn

  3. Vòng lặp vô tận trong chức năng kích hoạt

  4. pg gem Trace / BPT trap:5 lỗi trên MAC OS X lion

  5. Truy vấn gốc dữ liệu mùa xuân không cho phép tồn tại toán tử chuỗi Postgres jsonb (dấu chấm hỏi)