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

Mảng PostgreSQL có thể được tối ưu hóa để tham gia không?

Không, lưu trữ FK trong một mảng không bao giờ là một ý tưởng hay cho các bảng mục đích chung. Trước hết, có một thực tế mà bạn đã đề cập ở trên:Các ràng buộc khóa ngoại cho các phần tử mảng chưa được triển khai (chưa). Chỉ điều này sẽ làm mất ý tưởng.

Đã có một nỗ lực triển khai tính năng cho Postgres 9.3 đã bị dừng lại do các vấn đề nghiêm trọng về hiệu suất. Xem chủ đề này trên pgsql-hacker.

Ngoài ra, trong khi hiệu suất đọc có thể được cải thiện với các mảng cho các trường hợp sử dụng nhất định, hiệu suất ghi sẽ giảm mạnh. Hãy nghĩ về nó:Để chèn, cập nhật hoặc xóa một phần tử đơn lẻ khỏi một mảng dài, bây giờ bạn phải viết một phiên bản hàng mới với toàn bộ mảng cho mọi phần tử được thay đổi. Và tôi cũng thấy sự cạnh tranh về khóa nghiêm trọng ở phía trước.

Nếu bảng của bạn là chỉ đọc , ý tưởng bắt đầu có ý nghĩa hơn. Nhưng sau đó, tôi sẽ xem xét một chế độ xem cụ thể hóa với các mảng không chuẩn hóa ở trên cùng của một triển khai nhiều đến nhiều được chuẩn hóa:

Trong khi ở đó, MV có thể bao gồm tất cả các bảng nối và tạo ra một bảng phẳng để có hiệu suất đọc tốt hơn (đối với các trường hợp sử dụng điển hình). Bằng cách này, bạn nhận được tính toàn vẹn của tham chiếu hiệu suất đọc (và ghi) tốt - với chi phí đầu tư và bộ nhớ bổ sung để quản lý MV.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgresql, không thể xác định cột trong loại dữ liệu bản ghi

  2. Kiểm tra xem trường có tồn tại trong cột kiểu json PostgreSQL hay không

  3. psql trả về giá trị / lỗi giết chết tập lệnh shell đã gọi nó?

  4. Có thể truyền trực tiếp con trỏ làm tham số tới FETCH trên Npgsql không?

  5. Tại sao các chuỗi không được cập nhật khi COPY được thực hiện trong PostgreSQL?