2009-09-09 53 views
128

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ại và khóa chính.Sự khác nhau giữa Index v.s. Khóa trong MySQL

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ã 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ỳ tài liệu nào trong trang chính thức của MySQL.

Có thể cho tôi biết sự khác nhau giữa KEY và INDEX không? Những gì tôi có thể thấy sự khác biệt là khi tôi sử dụng KEY ..., tôi cần phải lặp lại từ, ví dụ: KEY order_date (order_date).

Trả lời

182

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

Từ the CREATE TABLE manual entry:

KEY thường là một từ đồng nghĩa với INDEX. Thuộc tính khóa PRIMARY KEY có thể cũng được chỉ định là chỉ KEY khi được đưa ra trong định nghĩa cột. Đây là được triển khai để tương thích với các hệ thống cơ sở dữ liệu khác.

+1

Khi nhìn vào thông tin bảng trong phiên bản mới nhất của SQLyog nó cho thấy 'KEY KeyName (column_name) 'khi tôi tạo ra bàn với' INDEX KeyName (column_name) '. Thực tế là nó là một từ đồng nghĩa giải thích nó một cách hoàn hảo. – crmpicco

3

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

Chỉ mục là cấu trúc 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 hợp lý.

SO ...

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

Nguồn: Cơ sở dữ liệu Thiết kế cho Mere mortals

Tác giả: Michael Hernandez

+0

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

6

Dưới đây là một mô tả tốt đẹp về sự "khác biệt":
http://discuss.fogcreek.com/joelonsoftware5/default.asp?cmd=show&ixPost=152398

"MySQL đòi hỏi mỗi chủ chốt 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. "

+0

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

0

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

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

  2. Chỉ mục giúp chúng tôi truy cập nhanh vào 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ó khóa nhưng không có chỉ mục là bắt buộc.

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

+0

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

Các vấn đề liên quan