Nếu dữ liệu của bạn là duy nhất, bạn nên tạo UNIQUE lập chỉ mục về chúng.
Điều này ngụ ý không có thêm chi phí và ảnh hưởng đến quyết định của trình tối ưu hóa trong một số trường hợp nhất định để nó có thể chọn một thuật toán tốt hơn.
Trong SQL Server và trong PostgreSQL , chẳng hạn, nếu bạn sắp xếp trên UNIQUE , trình tối ưu hóa bỏ qua ORDER BY mệnh đề được sử dụng sau đó (vì chúng không liên quan), i. e. truy vấn này:
SELECT *
FROM mytable
ORDER BY
col_unique, other_col
LIMIT 10
sẽ sử dụng một chỉ mục trên col_unique và sẽ không sắp xếp trên other_col bởi vì nó vô dụng.
Truy vấn này:
SELECT *
FROM mytable
WHERE mycol IN
(
SELECT othercol
FROM othertable
)
cũng sẽ được chuyển đổi thành INNER JOIN (trái ngược với SEMI JOIN ) nếu có UNIQUE lập chỉ mục trên othertable.othercol .
Chỉ mục luôn chứa một số loại con trỏ đến hàng (ctid trong PostgreSQL , con trỏ hàng trong MyISAM , khóa chính / bộ duy nhất trong InnoDB ) và các lá được sắp xếp theo thứ tự trên các con trỏ này, vì vậy trên thực tế, mọi lá chỉ mục đều là duy nhất theo một cách nào đó (mặc dù nó có thể không rõ ràng).
Xem bài viết này trong blog của tôi để biết chi tiết về hiệu suất: