Có thực hành tốt để tạo chỉ mục cho mỗi khóa ngoại trong cơ sở dữ liệu SQL Server không?Mỗi khóa ngoại SQL Server có chỉ mục phù hợp không?
Trả lời
Có thực hành tốt, xem tại đây: When did SQL Server stop putting indexes on Foreign Key columns? cuộn xuống Có lợi ích nào khi lập chỉ mục các cột khóa ngoài không? phần
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.
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
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.
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
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
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'. –
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.
- 1. Tập lệnh để thêm chỉ mục trên mỗi khóa ngoại?
- 2. Cách viết chỉ mục, khóa, khóa ngoài trong SQL Server
- 3. Khóa ngoại có tự động tạo chỉ mục không?
- 4. Chỉ mục nhóm SQL Server
- 5. Chỉ mục SQL Server - cột nào cần đưa vào chỉ mục?
- 6. Windows Server 2008 "Server Core" có phù hợp với phiên bản SQL Server không?
- 7. Đặt chỉ mục SQL Server số nhỏ
- 8. Các khóa ngoài có được lập chỉ mục tự động trong SQL Server không?
- 9. Chỉ mục băm SQL Server
- 10. khóa chính và chỉ mục sql
- 11. Chỉ mục tổng hợp so với INCLUDE Chỉ mục bao gồm trong SQL Server
- 12. Làm cách nào tôi có thể tìm thấy khóa ngoài không được lập chỉ mục trong SQL Server
- 13. Chế độ xem chỉ mục SQL Server
- 14. Cách nhập bảng mà không làm mất chỉ mục và khóa trong SQL Server 2008
- 15. Một khóa ngoại có thể tham chiếu đến một chỉ mục không duy nhất không?
- 16. Làm cách nào để thả khóa ngoại trong SQL Server?
- 17. Chỉ mục nhóm được gộp trong SQL Server
- 18. Lý do không có chỉ mục nhóm trong SQL Server 2005
- 19. Lập chỉ mục SQL cho Giữa truy vấn chỉ với một kết quả phù hợp?
- 20. Chỉ mục không được nhóm SQL Server 2008 có chứa các trường chỉ mục được nhóm không?
- 21. SQL Server sẽ không sử dụng chỉ mục của tôi
- 22. Sql Server Unique Key cũng là một chỉ mục?
- 23. Sự khác biệt giữa khóa chính và chỉ mục duy nhất trong SQL Server
- 24. Thứ tự chỉ mục SQL Server (trường ngày giờ)
- 25. chìa khóa ngoại tham khảo 2 cột khóa chính trong SQL Server
- 26. Cách tạo khóa chính kết hợp trong SQL Server 2008
- 27. Khóa chính có cần thiết trong SQL Server không?
- 28. Chỉ mục SQL Server nào nên được nhóm lại?
- 29. Mã khóa phù hợp cho `#`
- 30. Chi phí SQL Server chỉ số
Thực tiễn tốt trong một số trường hợp, nhưng không phải cho * mọi * khóa ngoại. –