Sự khác biệt giữa chỉ mục duy nhất và khóa duy nhất là gì?Chỉ mục duy nhất hoặc khóa duy nhất?
Trả lời
Phần duy nhất không phải là nơi có sự khác biệt. Chỉ mục và khóa không giống nhau và không thể so sánh được.
Khóa là cột dữ liệu hoặc một số cột, buộc phải là duy nhất với ràng buộc, khóa chính hoặc bị từ chối rõ ràng ràng buộc duy nhất. Trong khi đó chỉ mục là cấu trúc để lưu trữ vị trí dữ liệu để truy xuất nhanh hơn.
Từ các tài liệu:
Tạo một chỉ số duy nhất trên một bảng hoặc xem. Chỉ mục duy nhất là chỉ mục duy nhất trong đó không có hai hàng nào được phép có giá trị khóa chỉ mục giống nhau là . Một nhóm chỉ mục trên một cái nhìn phải là duy nhất
Bạn có thể sử dụng các ràng buộc UNIQUE để làm chắc chắn rằng không có giá trị trùng lặp là nhập vào cột cụ thể mà làm không tham gia vào một chính Chìa khóa. Mặc dù cả hai một hạn chế UNIQUE và một hạn chế PRIMARY KEY thực thi độc đáo, sử dụng một hạn chế UNIQUE thay vì một KEY constraint TIỂU khi bạn muốn thực thi các độc đáo của một cột, hoặc kết hợp các cột, đó không phải là khóa chính .
Điều này MSDN article comparing the two is what you're after. Thuật ngữ là như vậy mà "hạn chế" là ANSI, nhưng trong SQL Server bạn không thể vô hiệu hóa một ràng buộc duy nhất ...
Đối với hầu hết các mục đích, không có sự khác biệt - ràng buộc được thực hiện như một chỉ mục trong trang bìa. Các bài viết MSDN sao này lên - sự khác biệt là ở các siêu dữ liệu, cho những thứ như:
- tinh chỉnh fillfactor
- BAO GỒM NHỮNG SỰ cung cấp chỉ số hiệu quả hơn bao phủ (hạn chế composite)
- Một chỉ số lọc giống như một ràng buộc đối với một tập hợp con các hàng/bỏ qua nhiều số không, v.v.
"Khóa duy nhất" là một thuật toán. Chìa khóa (AKA "Candidate Key") là tính năng logic của cơ sở dữ liệu - một ràng buộc thực thi tính duy nhất của một tập các thuộc tính trong một bảng.
Chỉ mục là tính năng mức vật lý nhằm tối ưu hóa hiệu suất theo một cách nào đó. Có nhiều loại chỉ mục.
Khóa duy nhất: Đây là hạn chế áp đặt giới hạn trên cơ sở dữ liệu. Giới hạn đó là nó sẽ không cho phép các giá trị trùng lặp. Ví dụ: nếu bạn muốn chọn một cột làm khóa chính, nó KHÔNG phải là NULL & UNIQUE.
Chỉ mục duy nhất: Đây là chỉ mục giúp cải thiện hiệu suất trong khi thực hiện truy vấn trên cơ sở dữ liệu của bạn. Trong chỉ mục duy nhất nó cũng không cho phép các giá trị trùng lặp trong chỉ mục. ie.no hai hàng sẽ có cùng giá trị khóa chỉ mục.
Cả khóa (cũng như từ khóa) và chỉ mục là số nhận dạng của hàng trong bảng.
Mặc dù chỉ mục là cấu trúc nhận dạng song song, có chứa một con trỏ đến hàng được xác định, trong khi các phím nằm trong các thành viên trường situ.
Khóa, như số nhận dạng, ngụ ý tính duy nhất (ràng buộc) và NOT NULL (ràng buộc). Không có ý nghĩa trong NULL là định danh (như null không thể xác định bất cứ điều gì) cũng như giá trị nhận dạng nonunique.
Chỉ mục không nhóm có thể chứa dữ liệu thực, không phân phát dưới dạng số nhận dạng cho dữ liệu thực và do đó không phải là duy nhất [1]
Thật không may là khóa hoặc chỉ mục (số nhận dạng) được gọi bằng ràng buộc (quy tắc hoặc hạn chế) những gì hầu hết các câu trả lời trước đây ở đây đều theo sau.
phím được sử dụng trong bối cảnh:
- thay thế phím ứng cử viên aka aka thứ cấp, có thể có nhiều
- chìa khóa composite (một vài lĩnh vực kết hợp)
- khóa chính (superkey), tự nhiên hoặc thay thế chủ chốt, chỉ có một, thực sự sử dụng cho toàn vẹn tham chiếu
- nước ngoài chủ chốt
chính nước ngoài là chìa khóa trong một bảng khác (nơi đó là khóa chính) và thậm chí không phải là khóa mà họ thường xuyên tham chiếu. Việc sử dụng như vậy được giải thích bằng cách rút ngắn thuật ngữ "hạn chế khoá ngoại" thành "khóa ngoại".
Ràng buộc khóa chính thực sự ngụ ý ràng buộc NOT NULL và UNIQUE + cột được tham chiếu (hoặc cột kết hợp) là số nhận dạng và cũng không may thay thế bằng "khóa chính" hoặc "ràng buộc khóa chính" trong khi cả hai không thể gọi ràng buộc chỉ (khóa chính) hoặc chỉ bằng khóa (chính).
Cập nhật:
câu hỏi có liên quan của tôi:
[1]
UNIQUE argument for INDEX creation - what's for?
- 1. mysql khóa duy nhất và chỉ số
- 2. Tạo khóa duy nhất
- 3. Phím duy nhất so với chỉ mục duy nhất trên SQL Server 2008
- 4. Thêm chỉ mục duy nhất. SQLite3
- 5. Tạo khóa duy nhất MongoDB với C#
- 6. Ràng buộc duy nhất của Oracle và chỉ mục duy nhất
- 7. Sự khác biệt giữa Khóa, Khóa chính, Khóa và Chỉ mục duy nhất trong MySQL
- 8. Trích xuất chỉ một thư mục duy nhất từ tar
- 9. FOSUserBundle: Xóa chỉ mục duy nhất cho emailCanonical
- 10. Phân vùng máy chủ SQL - Lỗi chỉ mục duy nhất
- 11. Bộ sưu tập Java - Khóa duy nhất và giá trị duy nhất
- 12. Sự khác biệt giữa Khóa duy nhất và chỉ mục với IsUnique = Có?
- 13. Pandas: dataframe duy nhất
- 14. Tạo ID duy nhất
- 15. Sự khác biệt giữa khóa chính và chỉ mục duy nhất trong SQL Server
- 16. Một khóa ngoại có thể tham chiếu đến một chỉ mục không duy nhất không?
- 17. Tại sao MySQL Innodb "Tạo chỉ mục sắp xếp" khi chỉ mục duy nhất tồn tại?
- 18. Làm lại hợp nhất chỉ một tệp duy nhất
- 19. Mô hình dữ liệu thực thể, chỉ số duy nhất
- 20. Cách tạo Chỉ mục nhiều cột hoặc Ràng buộc duy nhất với NHibernate
- 21. Tạo các màu duy nhất
- 22. Thay đổi chỉ mục không độc lập thành chỉ mục duy nhất
- 23. Mongoose trùng lặp với khóa lược đồ duy nhất
- 24. Chỉ số UNREQUE của PostgreSQL không phải là duy nhất?
- 25. Cách tạo Long duy nhất bằng UUID
- 26. Cách tạo khóa duy nhất cho từ điển trong Python
- 27. EXE duy nhất với LGPL?
- 28. Hiệu suất MySQL của trường varchar duy nhất vs bigint duy nhất
- 29. Xác nhận trường biểu mẫu duy nhất chỉ trong Symfony2
- 30. MySQL id duy nhất hoặc kết hợp id
"hạn chế được thực hiện như một chỉ số dưới tấm chăn" - hoàn toàn đúng, và nó sẽ là bất khả thi để thực thi một cách hiệu quả không có chỉ mục trong mọi trường hợp. – DaveBoltman