2010-09-06 14 views

Trả lời

35

Mọi khóa ngoại? Không. Khi độ chọn lọc thấp (nghĩa là nhiều giá trị được nhân bản), chỉ mục có thể tốn kém hơn so với quét bảng. Ngoài ra, trong môi trường hoạt động cao (nhiều hoạt động chèn/cập nhật/xóa hơn truy vấn) chi phí duy trì các chỉ mục có thể ảnh hưởng đến hiệu suất tổng thể của hệ thống.

+1

OK. Vì vậy, có một số giới hạn số hoặc ngưỡng có thể kích hoạt việc tạo ra một chỉ mục? – GRGodoi

11

Lý do lập chỉ mục cột khóa ngoại cũng giống như lý do lập chỉ mục bất kỳ cột nào khác: tạo chỉ mục nếu bạn định lọc hàng theo cột. Ví dụ, nếu bạn có bảng [User] (ID int, Tên varchar (50)) và bảng [UserAction] (UserID int, Action varchar (50)), bạn có thể sẽ muốn tìm những gì hành động mà một người dùng cụ thể đã làm. Ví dụ: bạn sẽ chạy truy vấn sau:

select ActionName from [UserAction] where UserID = @UserID 

Nếu bạn không có ý định lọc hàng theo cột thì không cần phải đặt chỉ mục trên đó. Và ngay cả khi bạn làm nó có giá trị nó chỉ khi bạn có hơn 20 - 30 hàng.

+0

Bạn có chắc rằng chỉ mục này sẽ không hữu ích trong quá trình xác thực khóa ngoài khi tôi thực thi chèn trên UserAction? – GRGodoi

+1

No. Việc xác thực được thực hiện dựa trên bảng và cột chứa khóa chính hoặc ràng buộc duy nhất (ví dụ: [Người dùng]. [ID]). Không cần phải xác thực cột UserID của bảng [UserAction]. Bạn chỉ có thể tham chiếu một cột có khóa chính hoặc ràng buộc duy nhất trên cột để nó luôn được lập chỉ mục. – ItsMe

+2

Tác vụ khác cần xem xét là xóa các hàng khỏi 'Người dùng', khiến động cơ tìm kiếm các hàng trong' UserAction' dựa trên 'UserID'. –

5

Từ MSDN: FOREIGN KEY Constraints

Tạo một chỉ mục trên một chìa khóa nước ngoài thường rất hữu ích vì những lý do sau đây:

  • Thay đổi chế PRIMARY KEY được kiểm tra với các ràng buộc khóa ngoại trong bảng liên quan.
  • Cột khóa ngoài thường được sử dụng trong tiêu chí kết hợp khi dữ liệu từ các bảng có liên quan được kết hợp trong truy vấn bằng cách khớp cột hoặc cột trong ràng buộc KEY NGOẠI HỐI của một bảng với cột hoặc cột chính hoặc cột duy nhất trong bảng khác.
Các vấn đề liên quan