ความแตกต่างระหว่างคีย์, คีย์หลัก, คีย์เฉพาะและดัชนีใน MySQL


250

เมื่อฉันควรใช้KEY, PRIMARY KEY, UNIQUE KEYและINDEX?


2
คีย์หลักใช้สำหรับระบุแถวป้องกันการแทรกสองแถวด้วยข้อมูลที่เหมือนกัน ... คีย์ INDEX ใช้สำหรับการเร่งการค้นหา (แทรกช้าน้อยที่สุด) ปุ่ม UNIQUE สำหรับข้อมูลเฉพาะในคอลัมน์
Hos Mercury

1
ลองดูที่dba.stackexchange.com/questions/15572/... และstackoverflow.com/questions/1401572/…
LCJ

คำตอบ:


303

KEYและINDEXคำพ้องความหมายใน MySQL พวกเขาหมายถึงสิ่งเดียวกัน ในฐานข้อมูลคุณจะใช้ดัชนีเพื่อปรับปรุงความเร็วในการดึงข้อมูล ดัชนีจะถูกสร้างขึ้นโดยทั่วไปในคอลัมน์ที่ใช้ในการJOIN, WHEREและORDER BYข้อ

ลองนึกภาพคุณมีตารางชื่อusersและคุณต้องการค้นหาผู้ใช้ทั้งหมดที่มีนามสกุล 'Smith' หากไม่มีดัชนีฐานข้อมูลจะต้องผ่านระเบียนทั้งหมดของตาราง: ช้าเพราะยิ่งคุณมีระเบียนในฐานข้อมูลของคุณมากเท่าไหร่ก็ยิ่งต้องทำงานเพื่อค้นหาผลลัพธ์มากขึ้นเท่านั้น ในทางกลับกันดัชนีจะช่วยให้ฐานข้อมูลข้ามไปยังหน้าเว็บที่เกี่ยวข้องที่มีการบันทึก 'Smith' อย่างรวดเร็ว สิ่งนี้คล้ายกันมากกับวิธีที่เรามนุษย์ผ่านไดเรกทอรีสมุดโทรศัพท์เพื่อค้นหาใครบางคนโดยใช้ชื่อ: เราไม่ได้เริ่มค้นหาจากไดเรกทอรีจากหน้าปกเพื่อครอบคลุมตราบใดที่เราใส่ข้อมูลลงในลำดับที่เราสามารถทำได้ ใช้เพื่อข้ามไปยังหน้า 'S' อย่างรวดเร็ว

คีย์หลักและคีย์เฉพาะนั้นคล้ายคลึงกัน คีย์หลักคือคอลัมน์หรือการรวมกันของคอลัมน์ที่สามารถระบุแถวโดยไม่ซ้ำกัน มันเป็นกรณีพิเศษของคีย์ที่ไม่ซ้ำกัน ตารางสามารถมีคีย์หลักได้ไม่เกินหนึ่งคีย์ แต่มีคีย์เฉพาะมากกว่าหนึ่งคีย์ เมื่อคุณระบุคีย์ที่ไม่ซ้ำกันในคอลัมน์ไม่มีแถวที่แตกต่างกันสองแถวในตารางสามารถมีค่าเดียวกัน

โปรดทราบว่าคอลัมน์ที่กำหนดเป็นคีย์หลักหรือคีย์เฉพาะจะถูกจัดทำดัชนีใน MySQL โดยอัตโนมัติ


2
ฉันสามารถมีทั้งคีย์เฉพาะและคีย์หลักที่มีค่าเหมือนกันได้หรือไม่
ช่วยเหลือ

58
@needHELP: หากคุณมีตารางที่passengersมีฟิลด์ต่อไปนี้: (id, first_name, last_name, age, passport_number)ปกติแล้วคุณจะตั้งค่าidคอลัมน์ให้เป็นคีย์หลัก คีย์หลักจะเป็นคีย์เฉพาะโดยอัตโนมัติ ความแตกต่างที่สำคัญคือคุณสามารถมีคีย์หลักได้เพียงคีย์เดียวเท่านั้นในตารางและคอลัมน์ไม่สามารถมีNULLค่าได้ ไม่มีความจำเป็นต้องตั้งค่าเป็นidคอลัมน์ที่จะเป็นUNIQUEเพราะการตั้งค่าให้คีย์หลักก็รับประกันโดยอัตโนมัติจะไม่ซ้ำกัน ... แล้วคุณยังสามารถตั้งค่าpassport_numberการUNIQUEเพื่อให้ไม่เกินหนึ่งผู้โดยสาร ...
แดเนียล Vassallo

32
... จะสามารถใช้หมายเลขหนังสือเดินทางเดียวกันได้ อย่างไรก็ตามคุณอาจมีผู้โดยสาร (เช่นเด็ก ๆ ) โดยไม่มีหมายเลขหนังสือเดินทาง ในกรณีนั้นคุณสามารถแทรกNULLในคอลัมน์นั้นได้โดยไม่มีปัญหา
Daniel Vassallo

2
@DanielVassallo ฉันชอบวิธีที่คุณล้างมันระหว่างคำพ้องที่ใช้โดย MySQL
SIFE

1
หนึ่งในคำอธิบายที่ดีที่สุด ขอบคุณมาก :-)
Ravi Hirani

61

KEY และ INDEX เป็นคำพ้องความหมาย

คุณควรเพิ่มดัชนีเมื่อการวัดประสิทธิภาพและอธิบายให้คุณทราบว่าแบบสอบถามไม่มีประสิทธิภาพเนื่องจากดัชนีที่ขาดหายไป การเพิ่มดัชนีสามารถปรับปรุงประสิทธิภาพการสืบค้น (แต่สามารถชะลอการปรับเปลี่ยนตาราง)

คุณควรใช้ UNIQUE เมื่อคุณต้องการยับยั้งค่าในคอลัมน์นั้น (หรือคอลัมน์) ว่าเป็นค่าที่ไม่ซ้ำกันดังนั้นการพยายามแทรกค่าที่ซ้ำกันส่งผลให้เกิดข้อผิดพลาด

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


คีย์หลักใช้เพื่อระบุตัวตนของแต่ละแถว? อธิบายขอโทษสำหรับความไม่รู้ของฉัน
ช่วยเหลือ

@needHELP: มันถูกใช้เป็นวิธีการระบุแถวในตารางของคุณโดยไม่ซ้ำใคร ตัวอย่างเช่นหากคุณต้องการลบแถวที่เฉพาะเจาะจงในตารางของคุณมันมีประโยชน์ที่จะมีวิธีการระบุอย่างชัดเจนเพื่อให้คุณไม่ได้ลบแถวผิดโดยไม่ตั้งใจ นอกจากนี้ยังมีประโยชน์สำหรับการเข้าร่วมกับตารางอื่นเนื่องจากมีการจัดทำดัชนี
Mark Byers

48

คีย์หลักไม่อนุญาตให้ใช้NULLค่า แต่คีย์เฉพาะอนุญาตให้ใช้NULLค่าได้

เราสามารถประกาศคีย์หลักเดียว ในตารางได้ แต่ตารางสามารถมีคีย์ที่ไม่ซ้ำกันหลายตัว (กำหนดคอลัมน์)


17

PRIMARY KEYและUNIQUE KEYมีความคล้ายคลึงยกเว้นมีหน้าที่แตกต่างกัน คีย์หลักทำให้แถวของตารางไม่ซ้ำกัน (เช่นไม่สามารถมี 2 แถวที่มีคีย์เดียวกันแน่นอน) คุณสามารถมีได้ 1 คีย์หลักในตารางฐานข้อมูล

คีย์ที่ไม่ซ้ำทำให้คอลัมน์ของตารางในแถวของตารางไม่ซ้ำกัน (กล่าวคือไม่มีแถวของตาราง 2 อันที่มีค่าที่แน่นอนเหมือนกัน) คุณสามารถมีคอลัมน์ตารางคีย์ที่ไม่ซ้ำกันได้มากกว่า 1 รายการ (ซึ่งแตกต่างจากคีย์หลักซึ่งหมายความว่าคอลัมน์คอลัมน์ 1 ตารางเท่านั้นในตารางนั้นไม่ซ้ำกัน)

INDEXยังสร้างเอกลักษณ์ MySQL (ตัวอย่าง) จะสร้างตารางการทำดัชนีสำหรับคอลัมน์ที่ทำดัชนี วิธีนี้จะง่ายต่อการดึงค่าแถวของตารางเมื่อมีการสอบถามแบบสอบถามในคอลัมน์ตารางที่จัดทำดัชนีนั้น ข้อเสียคือถ้าคุณทำการอัปเดต / ลบ / สร้างหลายครั้ง MySQL จะต้องจัดการตารางการจัดทำดัชนี (และอาจเป็นคอขวดของประสิทธิภาพ)

หวังว่านี่จะช่วยได้


นอกจากนี้UNIQUE KEYสามารถเป็นได้NULLแต่PRIMARY KEYไม่สามารถเป็นNULLได้
Rafay

10

คีย์ที่ไม่ซ้ำ: คอลัมน์ที่ไม่มีสองแถวเหมือนกัน

คีย์หลัก: การรวบรวมจำนวนคอลัมน์ขั้นต่ำที่สามารถระบุได้ทุกแถวในตาราง (กล่าวคือไม่มีสองแถวคล้ายกันในทุกคอลัมน์ที่เป็นคีย์หลัก) สามารถมีได้มากกว่าหนึ่งคีย์หลักในตาราง หากมีคีย์เฉพาะอยู่แล้วจะเป็นคีย์หลัก (ไม่ใช่ "the" คีย์หลัก) ในตาราง หากไม่มีคีย์ที่ไม่ซ้ำจะต้องมีค่าคอลัมน์มากกว่าหนึ่งค่าเพื่อระบุแถวเช่น (first_name, last_name, father_name, mother_name) ในบางตารางเป็นคีย์หลัก

ดัชนี: ใช้เพื่อปรับการค้นหาให้เหมาะสม หากคุณกำลังจะค้นหาหรือเรียงลำดับผลลัพธ์บนพื้นฐานของคอลัมน์หลาย ๆ ครั้ง (เช่นคนส่วนใหญ่จะค้นหานักเรียนโดยใช้ชื่อไม่ใช่โดยการหมุนหมายเลขของพวกเขา) จากนั้นจะสามารถปรับให้เหมาะสมหากค่าคอลัมน์ทั้งหมด " จัดทำดัชนี "ตัวอย่างเช่นด้วยอัลกอริทึมต้นไม้ไบนารี


ฉันคิดว่าคุณตั้งใจจะพูดว่ามีเพียงหนึ่ง PK ในตาราง
Răzvan Flavius ​​Panda

7

คีย์หลัก - เราสามารถใส่คีย์หลักเดียวเท่านั้นในตารางลงในตารางและเราไม่สามารถปล่อยให้คอลัมน์นั้นว่างเมื่อเราป้อนค่าลงในตาราง

Unique Key - เราสามารถใส่กุญแจพิเศษมากกว่าหนึ่งอันบนโต๊ะและเราอาจปล่อยให้คอลัมน์นั้นว่างเมื่อเราใส่ค่าลงในตาราง คอลัมน์ใช้ค่าที่ไม่ซ้ำกัน (ไม่เหมือนกัน) เมื่อเราใช้คีย์หลัก & ที่ไม่ซ้ำกัน


ตารางมีคีย์หลักเพียงอันเดียว แต่คีย์ที่ไม่ซ้ำมีมากกว่าหนึ่ง
VIKASH

6

คีย์หลักถูกใช้เพื่อทำงานกับตารางที่แตกต่างกัน นี่คือรากฐานของฐานข้อมูลเชิงสัมพันธ์ หากคุณมีฐานข้อมูลหนังสือจะเป็นการดีกว่าที่จะสร้าง 2 ตาราง - 1) หนังสือและ 2) ผู้แต่งที่มีคีย์หลัก "id" INT จากนั้นคุณใช้ id ในหนังสือแทนชื่อผู้แต่ง

ใช้รหัสที่ไม่ซ้ำกันหากคุณไม่ต้องการให้มีรายการซ้ำ ตัวอย่างเช่นคุณอาจมีชื่อหนังสือในตารางหนังสือของคุณและต้องการให้แน่ใจว่ามีเพียงรายการเดียวสำหรับแต่ละหนังสือ


2

รหัสเฉพาะ:

  1. มากกว่าหนึ่งค่าสามารถเป็นโมฆะ
  2. ไม่มีทูเปิลสองตัวที่สามารถมีค่าเหมือนกันในคีย์เฉพาะ
  3. สามารถรวมคีย์ที่ไม่ซ้ำกันอย่างน้อยหนึ่งคีย์เพื่อสร้างคีย์หลัก แต่ไม่สามารถสลับกันได้

คีย์หลัก

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