Một khóa chỉ là một chỉ mục bình thường. Một cách đơn giản hóa hơn là nghĩ về nó giống như một danh mục thẻ ở thư viện. Nó hướng MySQL đi đúng hướng.
Một khóa duy nhất cũng được sử dụng để cải thiện tốc độ tìm kiếm, nhưng nó có hạn chế là không thể có các mục trùng lặp (không có hai x và y trong đó x không phải là y và x ==y).
Sách hướng dẫn giải thích nó như sau:
Chỉ mục UNIQUE tạo ra một ràng buộc sao cho tất cả các giá trị trong chỉ mục phải khác biệt. Lỗi xảy ra nếu bạn cố gắng thêm một hàng mới với giá trị khóa khớp với một hàng hiện có. Ràng buộc này không áp dụng cho các giá trị NULL ngoại trừ công cụ lưu trữ BDB. Đối với các công cụ khác, chỉ mục aUNIQUE cho phép nhiều giá trị NULL cho các cột có thể chứaNULL. Nếu bạn chỉ định giá trị tiền tố cho một cột trong chỉ mục DUY NHẤT, thì giá trị cột phải là duy nhất trong tiền tố.
Khóa chính là một khóa duy nhất 'đặc biệt'. Về cơ bản, nó là một khóa duy nhất, ngoại trừ việc nó được sử dụng để xác định một thứ gì đó.
Sách hướng dẫn giải thích cách sử dụng các chỉ mục nói chung:tại đây.
Trong MSSQL, các khái niệm tương tự nhau. Có chỉ mục, ràng buộc duy nhất và khóa chính.
Chưa được kiểm tra, nhưng tôi tin rằng MSSQL tương đương là:
CREATE TABLE tmp (
id int NOT NULL PRIMARY KEY IDENTITY,
uid varchar(255) NOT NULL CONSTRAINT uid_unique UNIQUE,
name varchar(255) NOT NULL,
tag int NOT NULL DEFAULT 0,
description varchar(255),
);
CREATE INDEX idx_name ON tmp (name);
CREATE INDEX idx_tag ON tmp (tag);
Chỉnh sửa:đoạn mã trên được kiểm tra là đúng; tuy nhiên, tôi nghi ngờ rằng có một cú pháp tốt hơn nhiều để làm điều đó. Đã được một thời gian kể từ khi tôi sử dụng máy chủ SQL và dường như tôi đã quên khá nhiều :).