Tôi đã tạo một ứng dụng trong Rails trên Heroku bằng cơ sở dữ liệu PostgreSQL.UUID có phải là khóa chính trong PostgreSQL cung cấp hiệu suất chỉ mục không tốt?
Nó có một vài bảng được thiết kế để có thể đồng bộ hóa với thiết bị di động nơi dữ liệu có thể được tạo ở những nơi khác nhau. Do đó tôi có một trường uuid là một chuỗi lưu trữ GUID ngoài khóa chính tăng tự động. Uuid là cái được truyền thông giữa máy chủ và máy khách.
Tôi nhận ra sau khi triển khai công cụ đồng bộ hóa ở phía máy chủ điều này dẫn đến vấn đề hiệu suất khi cần ánh xạ giữa uuid < -> id mọi lúc (khi viết đối tượng, tôi cần truy vấn uuid để lấy id trước khi lưu và ngược lại khi gửi lại dữ liệu).
Tôi hiện đang suy nghĩ về việc chuyển sang chỉ sử dụng UUID làm khóa chính giúp việc viết và đọc đơn giản hơn và nhanh hơn nhiều.
Tôi đã đọc UUID đó làm khóa chính đôi khi có thể cho hiệu suất chỉ mục xấu (phân mảnh chỉ mục) khi sử dụng chỉ mục khóa chính được nhóm. Có PostgreSQL bị vấn đề này hoặc là nó OK để sử dụng UUID là khóa chính?
Tôi đã có một cột UUID ngày hôm nay để lưu trữ khôn ngoan nó sẽ tốt hơn vì tôi thả cột id thông thường.
Trường 'id' có được sử dụng như khóa ngoài bởi bất kỳ quan hệ nào khác trong cơ sở dữ liệu không? Bạn chỉ giữ trường 'id' này xung quanh vì bạn tin rằng PRIMARY KEY phải là loại nối tiếp vì những lý do bạn đã mô tả? –
Clustering bằng khóa chính tổng hợp chỉ là một lợi ích nếu bạn có một con đường truy cập thường xuyên mà muốn truy vấn một loạt các giá trị pkey - đó là khá hiếm trong thế giới thực. UUID là một loại hoàn toàn tốt cho khóa chính, nó đủ nhỏ gọn (16bytes) và nhanh hơn so với op so với kiểu văn bản. – dbenhur
@Joshua Các trường id được sử dụng như khóa ngoài, các trường UUID chỉ được sử dụng như các trường thông thường được sử dụng để tham chiếu các mối quan hệ khi giao tiếp (mà cần phải dịch giữa chúng mọi lúc) – thejaz