Sự khác biệt giữa việc sử dụng INDEX so với KEY trong MySQL là gì?


191

Tôi biết cách sử dụng INDEX như trong đoạn mã sau. Và tôi biết cách sử dụng khóa ngoạikhóa chính .

CREATE TABLE tasks ( 
  task_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
  parent_id INT UNSIGNED NOT NULL DEFAULT 0, 
  task VARCHAR(100) NOT NULL, 
  date_added TIMESTAMP NOT NULL, 
  date_completed TIMESTAMP, 
  PRIMARY KEY (task_id), 
  INDEX parent (parent_id), 
  ....


Tuy nhiên tôi đã tìm thấy một mã sử dụng KEY thay vì INDEX như sau.

...
KEY order_date (order_date) 
...


Tôi không thể tìm thấy bất kỳ lời giải thích trên trang MySQL chính thức. Ai đó có thể cho tôi biết sự khác biệt giữa KEY và INDEX là gì không?

Sự khác biệt duy nhất tôi thấy là khi tôi sử dụng KEY ..., tôi cần lặp lại từ này, vd
KEY order_date (order_date).

Câu trả lời:


263

Không có sự khác biệt. Chúng là những từ đồng nghĩa.

Từ các CREATE TABLEentry của nhãn hiệu :

KEYthường là một từ đồng nghĩa cho INDEX. Thuộc tính khóa PRIMARY KEYcũng có thể được chỉ định như chỉ KEYkhi được đưa ra trong một định nghĩa cột. Điều này đã được thực hiện để tương thích với các hệ thống cơ sở dữ liệu khác.


1
Khi xem thông tin bảng trong phiên bản SQLYog mới nhất, nó hiển thị KEY keyname (column_name)khi tôi tạo bảng với INDEX keyname (column_name). Thực tế đó là một từ đồng nghĩa giải thích nó hoàn hảo.
crmpicco

14

Dưới đây là một mô tả hay về "sự khác biệt":

"MySQL yêu cầu mọi Khóa cũng được lập chỉ mục, đó là một chi tiết triển khai cụ thể cho MySQL để cải thiện hiệu suất."


2
Câu hỏi là về việc sử dụng Mã định danh SQL KEY và INDEX trong MySQL. Không phải là sự khác biệt giữa một khóa và một chỉ mục.
Josh J

Tôi đã tìm kiếm sự khác biệt với một công cụ tìm kiếm và đây là kết quả đầu tiên. Theo tôi không cần phải mở thêm một câu hỏi. Nhưng hãy thoải mái làm như vậy nếu bạn muốn.
Stefan


3

Khóa là các trường đặc biệt đóng vai trò rất cụ thể trong một bảng và loại khóa xác định mục đích của nó trong bảng.

Một chỉ mục là một cấu trúc mà RDBMS (hệ thống quản lý cơ sở dữ liệu) cung cấp để cải thiện xử lý dữ liệu. Một chỉ mục không có gì để làm với một cấu trúc cơ sở dữ liệu logic.

VÌ THẾ...

Khóa là các cấu trúc logic bạn sử dụng để xác định các bản ghi trong bảng và các chỉ mục là các cấu trúc vật lý bạn sử dụng để tối ưu hóa xử lý dữ liệu.

Nguồn: Thiết kế cơ sở dữ liệu cho những người bình thường

Tác giả: Michael Hernandez


1
Câu hỏi là về việc sử dụng Mã định danh SQL KEY và INDEX trong MySQL. Không phải là sự khác biệt giữa một khóa và một chỉ mục.
Josh J

-1

Khóa là một tập hợp các cột hoặc biểu thức mà chúng ta xây dựng một chỉ mục.

  1. Trong khi một chỉ mục là một cấu trúc được lưu trữ trong cơ sở dữ liệu, các khóa hoàn toàn là một khái niệm logic.

  2. Chỉ mục giúp chúng tôi truy cập nhanh vào một bản ghi, trong khi các khóa chỉ xác định các bản ghi duy nhất.

  3. Mỗi bảng sẽ nhất thiết phải có một khóa, nhưng có một chỉ mục là không bắt buộc.

Kiểm tra trên https://docs.oracle.com/cd/E11882_01/server.112/e40540/indexiot.htmlm#CNCPT721


3
Câu hỏi là về việc sử dụng Mã định danh SQL KEY và INDEX trong MySQL. Không phải là sự khác biệt giữa một khóa và một chỉ mục.
Josh J

1
@Josh J Ngay cả khi động lực ban đầu là hỏi về số nhận dạng, tìm kiếm sự khác biệt về khóa và chỉ mục với công cụ tìm kiếm mang lại chủ đề này. Nó có thể có ý nghĩa để cải thiện tiêu đề của câu hỏi để được cụ thể hơn. Mặt khác, viết một câu hỏi về sự khác biệt giữa khóa và chỉ mục trong mysql có thể được đánh dấu là trùng lặp. => Tôi thấy câu trả lời bổ sung như vậy rất hữu ích. Câu trả lời "thực sự" sẽ nhận được điểm cao nhất. Vì vậy, tôi không thấy một lý do cho phiếu bầu tiêu cực về câu trả lời bổ sung.
Stefan

Tôi đã viết hoa INDEX và KEY trong câu hỏi để làm rõ điều này.
Revierpost
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.