Hiệu suất khóa chính tổng hợp như một khóa ngoại


12

Tôi có một bảng với khóa Chính tổng hợp (bao gồm 4 cột) được sử dụng để đảm bảo không có mục trùng lặp nào được nhập vào bảng. Bây giờ tôi đang cần một bảng mới sẽ cần tham chiếu các khóa trong bảng này là khóa ngoại.

Câu hỏi của tôi là cách tiếp cận nào hiệu quả hơn cho tốc độ tra cứu:

1) Tôi có tạo bảng mới bao gồm cả 4 cột và tham chiếu tất cả chúng trong một khóa ngoại.

hoặc là

2) Tôi có tạo cột nhận dạng mới trong bảng Khóa chính và sử dụng khóa này làm khóa ngoại trong bảng mới.

Cơ sở dữ liệu này dự kiến ​​sẽ chứa một lượng dữ liệu rất lớn, vì vậy tôi đã xây dựng nó cho đến bây giờ với mục đích giảm thiểu lượng dữ liệu được giữ trong mỗi bảng. Với suy nghĩ này, tùy chọn 2 sẽ là cách tiếp cận tốt nhất vì tôi sẽ lưu 2 cột int và cột datetime cho mỗi hàng, nhưng tôi muốn tránh tăng thời gian tra cứu nếu không cần thiết.


1
Cá nhân tôi hầu như luôn sử dụng khóa thay thế (ví dụ: một INT IDENTITY) trong trường hợp như vậy - làm cho việc tham chiếu và tham gia bảng đó trở nên dễ dàng hơn nhiều. Để tránh trùng lặp, đặt một ràng buộc ĐỘC ĐÁO trên bốn cột đó. Ngoài ra: các khóa chính hẹp tốt hơn nhiều vì lý do hiệu suất (nếu chúng được sử dụng làm khóa phân cụm)
marc_s

Câu trả lời:


11

Chi phí sử dụng PK số nguyên tổng hợp đơn giản là nhỏ và lợi ích trong trường hợp của bạn có lẽ sẽ khá đáng kể.

  • Như bạn chỉ ra, bạn sẽ có mối quan hệ FK đơn giản hơn nhiều.
  • Một PK nhỏ làm cho các chỉ số nhỏ (và nhanh). Tổng không gian bảng của bạn có thể sẽ được thực hiện ít hơn bằng cách thêm một cột như vậy.
  • Nếu quy tắc kinh doanh thay đổi, bạn sẽ không phải sắp xếp lại bảng.

Nhược điểm duy nhất mà bạn nghĩ đến là bạn có thể mất hiệu suất đối với các truy vấn được hưởng lợi từ việc phân cụm trên PK tổng hợp. Nếu bạn nghĩ rằng điều đó có thể có ý nghĩa, hơn là tiếp tục phân cụm trên khóa ứng viên tổng hợp, nhưng đặt PK trên khóa tổng hợp.


5

Như thường thấy trong thế giới SQL, câu trả lời là: "Nó phụ thuộc."

Hãy xem câu hỏi này cho một số gợi ý: Các khóa tự nhiên cung cấp hiệu suất cao hơn hoặc thấp hơn trong SQL Server so với các khóa nguyên thay thế?

Có những trường hợp thấy sự cải thiện hiệu suất khi sử dụng khóa tự nhiên làm Khóa ngoại. Tuy nhiên, trong hầu hết các trường hợp, bạn sẽ trở nên tốt hơn với các phím nhỏ hơn (đọc: khóa thay thế).

Nếu bạn giới thiệu cột IDENTITY đó, tôi thậm chí sẽ biến nó thành Khóa chính và thay đổi các cột "tự nhiên" thành một CONSTRAINT ĐỘC ĐÁO thay thế.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.