Khi nào tôi nên sử dụng KEY
, PRIMARY KEY
, UNIQUE KEY
và INDEX
?
Khi nào tôi nên sử dụng KEY
, PRIMARY KEY
, UNIQUE KEY
và INDEX
?
Câu trả lời:
KEY
và INDEX
là từ đồng nghĩa trong MySQL. Họ có nghĩa là điều tương tự. Trong cơ sở dữ liệu, bạn sẽ sử dụng các chỉ mục để cải thiện tốc độ truy xuất dữ liệu. Một chỉ số thường được tạo ra trên các cột được sử dụng trong JOIN
, WHERE
và ORDER BY
mệnh đề.
Hãy tưởng tượng bạn có một bảng được gọi users
và bạn muốn tìm kiếm tất cả người dùng có họ 'Smith'. Nếu không có chỉ mục, cơ sở dữ liệu sẽ phải đi qua tất cả các bản ghi của bảng: điều này chậm, bởi vì bạn càng có nhiều bản ghi trong cơ sở dữ liệu của mình, bạn càng phải làm nhiều việc hơn để tìm kết quả. Mặt khác, một chỉ mục sẽ giúp cơ sở dữ liệu nhanh chóng chuyển đến các trang có liên quan nơi lưu giữ hồ sơ của 'Smith'. Điều này rất giống với cách chúng ta, con người, đi qua một danh bạ danh bạ điện thoại để tìm ai đó bằng tên cuối cùng: Chúng ta không bắt đầu tìm kiếm qua thư mục từ trang bìa đến trang bìa, miễn là chúng ta chèn thông tin theo một số thứ tự mà chúng ta có thể sử dụng để nhanh chóng chuyển đến các trang 'S'.
Khóa chính và khóa duy nhất là tương tự nhau. Khóa chính là một cột hoặc kết hợp các cột, có thể xác định duy nhất một hàng. Đây là một trường hợp đặc biệt của khóa duy nhất . Một bảng có thể có nhiều nhất một khóa chính, nhưng nhiều hơn một khóa duy nhất. Khi bạn chỉ định một khóa duy nhất trên một cột, không có hai hàng riêng biệt trong một bảng có thể có cùng giá trị.
Cũng lưu ý rằng các cột được xác định là khóa chính hoặc khóa duy nhất được tự động lập chỉ mục trong MySQL.
passengers
với các trường sau : (id, first_name, last_name, age, passport_number)
, bạn thường thiết lập id
cột làm khóa chính. Khóa chính tự động là khóa duy nhất. Sự khác biệt chính là bạn chỉ có thể có một khóa chính trên bảng và cột không thể chứa NULL
các giá trị. Không cần phải thiết lập các id
cột là UNIQUE
vì bằng cách thiết lập nó vào một khóa chính, nó sẽ tự động được bảo đảm là duy nhất ... Sau đó, bạn cũng có thể thiết lập passport_number
để UNIQUE
sao cho không có nhiều hơn một hành khách ...
NULL
vào cột đó mà không gặp vấn đề gì.
KEY và INDEX là từ đồng nghĩa.
Bạn nên thêm một chỉ mục khi đo hiệu suất và GIẢI THÍCH cho bạn thấy rằng truy vấn không hiệu quả do thiếu chỉ mục. Thêm một chỉ mục có thể cải thiện hiệu suất của các truy vấn (nhưng nó có thể làm chậm các sửa đổi đối với bảng).
Bạn nên sử dụng ĐỘC ĐÁO khi bạn muốn biến các giá trị trong cột đó (hoặc cột) thành duy nhất, để cố gắng chèn các giá trị trùng lặp dẫn đến lỗi.
Một khóa CHÍNH là cả một ràng buộc duy nhất và nó cũng ngụ ý rằng cột KHÔNG phải là NULL. Nó được sử dụng để cung cấp một danh tính cho mỗi hàng. Điều này có thể hữu ích để tham gia với một bảng khác thông qua ràng buộc khóa ngoài. Mặc dù không bắt buộc bảng phải có KHÓA CHÍNH, nhưng đó thường là một ý tưởng tốt.
Khóa chính không cho phép NULL
các giá trị, nhưng khóa duy nhất cho phép NULL
các giá trị.
Chúng ta chỉ có thể khai báo một khóa chính trong một bảng, nhưng một bảng có thể có nhiều khóa khóa duy nhất (gán cột).
PRIMARY KEY
VÀ UNIQUE KEY
tương tự ngoại trừ nó có chức năng khác nhau. Khóa chính làm cho hàng của bảng duy nhất (nghĩa là không thể có 2 hàng với cùng một khóa chính xác). Bạn chỉ có thể có 1 khóa chính trong bảng cơ sở dữ liệu.
Khóa duy nhất làm cho cột bảng trong một hàng của bảng là duy nhất (nghĩa là không có hàng 2 bảng nào có thể có cùng giá trị chính xác). Bạn có thể có nhiều hơn 1 cột bảng duy nhất (không giống như khóa chính có nghĩa là chỉ có 1 cột trong bảng là duy nhất).
INDEX
cũng tạo ra sự độc đáo. MySQL (ví dụ) sẽ tạo một bảng lập chỉ mục cho cột được lập chỉ mục. Theo cách này, việc truy xuất giá trị hàng của bảng dễ dàng hơn khi truy vấn được truy vấn trên cột bảng được lập chỉ mục đó. Nhược điểm là nếu bạn thực hiện nhiều cập nhật / xóa / tạo, MySQL phải quản lý các bảng lập chỉ mục (và đó có thể là một nút cổ chai hiệu năng).
Hi vọng điêu nay co ich.
UNIQUE KEY
có thể NULL
nhưng PRIMARY KEY
không thể được NULL
.
Khóa duy nhất: Các cột không có hai hàng giống nhau
Khóa chính: Tập hợp số lượng cột tối thiểu có thể xác định duy nhất mỗi hàng trong một bảng (nghĩa là không có hai hàng nào giống nhau trong tất cả các cột cấu thành khóa chính). Có thể có nhiều hơn một khóa chính trong một bảng. Nếu tồn tại một khóa duy nhất thì đó là khóa chính (không phải "khóa chính" trong bảng. Nếu không tồn tại một khóa duy nhất thì sẽ cần nhiều hơn một giá trị cột để xác định một hàng như (First_name, last_name, cha_name, Mother_name) trong một số bảng có thể tạo thành khóa chính.
Index: được sử dụng để tối ưu hóa các truy vấn. Nếu bạn định tìm kiếm hoặc sắp xếp kết quả trên cơ sở một số cột nhiều lần (ví dụ: hầu hết mọi người sẽ tìm kiếm các sinh viên theo tên chứ không phải theo số cuộn của họ.) Thì có thể tối ưu hóa nếu tất cả các giá trị cột " lập chỉ mục "ví dụ với thuật toán cây nhị phân.
Khóa chính - chúng ta chỉ có thể đặt một khóa chính trên bảng vào một bảng và chúng ta không thể để trống cột đó khi chúng ta nhập các giá trị vào bảng.
Khóa duy nhất - chúng ta có thể đặt nhiều hơn một khóa duy nhất trên một bảng và chúng ta có thể để trống cột đó khi chúng ta nhập các giá trị vào bảng. cột lấy các giá trị duy nhất (không giống nhau) khi chúng tôi áp dụng khóa chính & duy nhất.
Khóa chính được sử dụng để làm việc với các bảng khác nhau. Đây là nền tảng của cơ sở dữ liệu quan hệ. Nếu bạn có cơ sở dữ liệu sách, tốt hơn là tạo 2 bảng - 1) sách và 2) tác giả với "id" khóa chính INT. Sau đó, bạn sử dụng id trong sách thay vì tên tác giả.
Khóa duy nhất được sử dụng nếu bạn không muốn có các mục lặp lại. Ví dụ, bạn có thể có tiêu đề trong bảng sách của mình và muốn chắc chắn rằng chỉ có một mục nhập cho mỗi tên sách.
Khóa duy nhất:
Khóa chính