ความแตกต่างระหว่างการใช้ INDEX กับ KEY ใน MySQL คืออะไร


192

ฉันรู้วิธีใช้ INDEX ในรหัสต่อไปนี้ และฉันรู้ว่าวิธีการใช้งานที่สำคัญต่างประเทศและคีย์หลัก

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), 
  ....


อย่างไรก็ตามฉันพบรหัสโดยใช้ KEY แทน INDEX ดังต่อไปนี้

...
KEY order_date (order_date) 
...


ฉันไม่พบคำอธิบายใด ๆ ในหน้า MySQL อย่างเป็นทางการ ใครสามารถบอกฉันว่าอะไรคือความแตกต่างระหว่าง KEY และ INDEX

ข้อแตกต่างที่ผมเห็นก็คือว่าเมื่อผมใช้ผมจำเป็นต้องทำซ้ำคำเช่นKEY ...
KEY order_date (order_date)

คำตอบ:


264

ไม่มีความแตกต่าง พวกเขามีความหมายเหมือนกัน

จากรายการคู่มือ :CREATE TABLE

KEYINDEXเป็นปกติไวพจน์สำหรับ แอ็ตทริบิวต์คีย์PRIMARY KEYยังสามารถระบุได้เช่นเดียวกับที่KEYกำหนดในนิยามคอลัมน์ สิ่งนี้ถูกนำไปใช้เพื่อความเข้ากันได้กับระบบฐานข้อมูลอื่น ๆ


1
เมื่อมองไปที่ข้อมูลตารางในรุ่นล่าสุดของ SQLyog มันแสดงให้เห็นเมื่อฉันสร้างตารางที่มีKEY keyname (column_name) INDEX keyname (column_name)ความจริงที่ว่ามันเป็นคำพ้องความหมายอธิบายได้อย่างสมบูรณ์แบบ
crmpicco

14

นี่คือคำอธิบายที่ดีเกี่ยวกับ "ความแตกต่าง":

"MySQL ต้องการดัชนีทุกคีย์เช่นกันซึ่งเป็นรายละเอียดการใช้งานเฉพาะของ MySQL เพื่อปรับปรุงประสิทธิภาพ"


2
คำถามเกี่ยวกับการใช้ SQL Identifier KEY และ INDEX ใน MySQL ไม่ใช่ความแตกต่างระหว่างคีย์และดัชนี
Josh J

ฉันค้นหาความแตกต่างกับเครื่องมือค้นหาและนี่คือผลลัพธ์แรก ในความคิดของฉันไม่จำเป็นต้องเปิดคำถามเพิ่มเติม แต่คุณสามารถทำได้ถ้าคุณต้องการ
Stefan

5

มันถูกกล่าวถึงว่าเป็นคำพ้องความหมายINDEXในเอกสาร 'สร้างตาราง': คู่มือการอ้างอิง MySQL 5.5 :: 13 คำแถลงคำสั่ง SQL :: 13.1 คำจำกัดความของข้อมูลคำสั่ง :: 13.1.17 CREATE TABLE ไวยากรณ์

ยังไม่ได้อ้างถึงส่วนและเชื่อมโยงความช่วยเหลือสำหรับ 5.1

เช่นPRIMARY KEYสร้างคีย์หลักและดัชนีสำหรับคุณ KEYสร้างดัชนีเท่านั้น


4

คีย์เป็นฟิลด์พิเศษที่มีบทบาทเฉพาะอย่างมากภายในตารางและประเภทของคีย์จะเป็นตัวกำหนดจุดประสงค์ภายในตาราง

ดัชนีเป็นโครงสร้างที่ RDBMS (ระบบจัดการฐานข้อมูล) จัดทำเพื่อปรับปรุงการประมวลผลข้อมูล ดัชนีไม่มีส่วนเกี่ยวข้องกับโครงสร้างฐานข้อมูลเชิงตรรกะ

ดังนั้น...

คีย์เป็นโครงสร้างแบบลอจิคัลที่คุณใช้เพื่อระบุระเบียนภายในตารางและดัชนีเป็นโครงสร้างทางกายภาพที่คุณใช้เพื่อปรับการประมวลผลข้อมูลให้เหมาะสม

ที่มา: การออกแบบฐานข้อมูลสำหรับบุคคลทั่วไป

ผู้แต่ง: Michael Hernandez


1
คำถามเกี่ยวกับการใช้ SQL Identifier KEY และ INDEX ใน MySQL ไม่ใช่ความแตกต่างระหว่างคีย์และดัชนี
Josh J

-1

กุญแจสำคัญคือชุดของคอลัมน์หรือนิพจน์ที่เราสร้างดัชนี

  1. ในขณะที่ดัชนีเป็นโครงสร้างที่เก็บไว้ในฐานข้อมูลคีย์เป็นแนวคิดเชิงตรรกะอย่างเคร่งครัด

  2. ดัชนีช่วยเราในการเข้าถึงบันทึกอย่างรวดเร็วในขณะที่กุญแจก็ระบุระเบียนที่ไม่ซ้ำกัน

  3. ทุกตารางจะต้องมีคีย์ แต่การมีดัชนีนั้นไม่จำเป็น

ตรวจสอบที่https://docs.oracle.com/cd/E11882_01/server.112/e40540/indexiot.htm#CNCPT721


3
คำถามเกี่ยวกับการใช้ SQL Identifier KEY และ INDEX ใน MySQL ไม่ใช่ความแตกต่างระหว่างคีย์และดัชนี
Josh J

1
@Josh J แม้ว่าแรงจูงใจเริ่มแรกคือการถามเกี่ยวกับตัวระบุ แต่การค้นหาความแตกต่างเกี่ยวกับคีย์และดัชนีที่มีเครื่องมือค้นหาทำให้เกิดหัวข้อนี้ การปรับปรุงชื่อของคำถามให้มีความเฉพาะเจาะจงยิ่งขึ้น ในทางกลับกันการเขียนคำถามเกี่ยวกับความแตกต่างระหว่างคีย์และดัชนีใน mysql อาจถูกทำเครื่องหมายว่าซ้ำกัน => ฉันพบว่าคำตอบเสริมมีประโยชน์มาก คำตอบที่ "จริง" จะได้รับคะแนนสูงสุดอย่างไรก็ตาม ดังนั้นฉันไม่เห็นเหตุผลสำหรับการลงคะแนนเชิงลบในคำตอบที่สมบูรณ์
สเตฟาน

ฉันได้พิมพ์ดัชนีและคีย์ในคำถามเพื่อให้ชัดเจน
reinierpost
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.