INDEX บนคีย์หลักคอมโพสิตเป็นอย่างไรใน mysql


12

เมื่อสร้างคีย์หลักผสมสำหรับคอลัมน์สองคอลัมน์ขึ้นไปเช่นPRIMARY KEY(col1, col2, col3); ระบบจะINDEXแต่ละคอลัมน์แยกกันไหม

เหตุผลที่ฉันถามคำถามนี้คือเมื่อเราใช้UNIQUE INDEX (col1, col2, col3)มันจะทำหน้าที่เป็นINDEXคอลัมน์แรกเท่านั้นและเราจำเป็นต้องสร้างINDEXคอลัมน์เพิ่มเติมสำหรับคอลัมน์อื่น ๆ ฉันต้องการทราบว่าเป็นกรณีสำหรับคีย์หลักคอมโพสิตด้วยหรือไม่

คำตอบ:


16
  1. ดัชนีหลักเชิงประกอบจะทำให้แน่ใจว่าการรวมกันของค่า col1, col2, col3 นั้นไม่ซ้ำกัน หากจุดประสงค์ของดัชนีคือเพื่อให้แน่ใจว่าค่านั้นไม่เหมือนใครคุณจะประสบความสำเร็จได้

  2. ดัชนีคอมโพสิตยังมีการจับคู่ดัชนีในการรวมกันของคอลัมน์ col1, col2 และ col3

  3. คุณจะสร้างดัชนีแยกต่างหากใน col2 และ col3 หากคุณเข้าร่วมหรือกรองโดยใช้คอลัมน์ใด ๆ โดยไม่ต้องมีดัชนีอื่น

  4. ฉันชอบคีย์ตัวเลขหลักเสมอ (โดยไม่มีการเชื่อมโยงทางธุรกิจ) และดัชนีที่ไม่ซ้ำกันของคีย์หลักรวมที่จำเป็น


1
จุดดี! คีย์หลักผสมนั้นคล้ายคลึงกับ UNIQUE INDEX และเราไม่มีดัชนีสำหรับคอลัมน์ที่ 2, 3, ... สำหรับการดึงข้อมูลแถวอย่างรวดเร็ว?
Googlebot

1
@ssmusoke ฉันสามารถสันนิษฐานได้จากการละเว้นcol1ในจุดที่ 3 ที่SELECT * WHERE col1 = 10จะมีประสิทธิภาพหรือไม่
Andy

2
@Andy # 3 เป็นส่วนเพิ่มเติมจากดัชนีคอมโพสิตของ col1, col2 และ col3 ดังนั้นดัชนีคอมโพสิตจะถูกนำมาใช้ อย่างไรก็ตามหากคุณทำการกรองใน col2 และ col3 ที่ไม่มี col1 คุณจำเป็นต้องมีดัชนีแยกต่างหากสำหรับแต่ละรายการเหล่านั้น
Stephen Senkomago Musoke

3
การมีดัชนีบน col1, col2 และ col3 หมายความว่า SELECT * จาก col1 = 10 จะมีประสิทธิภาพเนื่องจาก col1 เป็นคอลัมน์แรกในดัชนีดังนั้น # 3 จะช่วยให้คุณทำเช่นเดียวกันสำหรับ col2 และ col3 ดังนั้นหากคุณ กรองตามคอลัมน์เหล่านี้เพียงอย่างเดียวโดยไม่มี col1 จากนั้นคอลัมน์ก็จะถูกจัดทำดัชนี
สตีเฟ่น Senkomago Musoke

2
@ PaulWasilewski ใช่แน่นอนมีกรณีพิเศษที่คีย์หลักคอมโพสิตทำให้รู้สึก แต่เป็นกรณีพิเศษ
Stephen Senkomago Musoke
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.