MySQL สร้างดัชนีคอลัมน์คีย์ต่างประเทศโดยอัตโนมัติหรือไม่?
MySQL สร้างดัชนีคอลัมน์คีย์ต่างประเทศโดยอัตโนมัติหรือไม่?
คำตอบ:
ใช่ แต่เพียงเปิด InnoDB. ปัจจุบัน Innodb เป็นรูปแบบตารางที่จัดส่งเท่านั้นที่มีการใช้งาน Foreign Key
เห็นได้ชัดว่าดัชนีจะถูกสร้างขึ้นโดยอัตโนมัติตามที่ระบุในการเชื่อมโยงโรเบิร์ตได้โพสต์
InnoDB ต้องการดัชนีในคีย์ต่างประเทศและรหัสอ้างอิงเพื่อให้การตรวจสอบคีย์ต่างประเทศนั้นรวดเร็วและไม่ต้องใช้การสแกนตาราง ในตารางอ้างอิงจะต้องมีดัชนีที่คอลัมน์คีย์ต่างประเทศจะแสดงรายการเป็นคอลัมน์แรกตามลำดับเดียวกัน ดัชนีดังกล่าวจะถูกสร้างขึ้นในตารางอ้างอิงโดยอัตโนมัติหากไม่มีอยู่ (ซึ่งตรงกันข้ามกับเวอร์ชันเก่าบางรุ่นซึ่งต้องสร้างดัชนีอย่างชัดเจนหรือการสร้างข้อ จำกัด ของคีย์ต่างประเทศจะล้มเหลว) index_name ถ้ากำหนดจะใช้ตามที่อธิบายไว้ก่อนหน้านี้
InnoDB permits a foreign key to reference any index column or group of columns. However, in the referenced table, there must be an index where the referenced columns are the first columns in the same order.
ใช่เห็นข้อ จำกัด InnoDB และต่างประเทศที่สำคัญ
คุณไม่ได้รับดัชนีโดยอัตโนมัติหากคุณทำ ALTER TABLE (แทนที่จะสร้าง CREATE TABLE) อย่างน้อยตามเอกสาร (ลิงก์สำหรับ 5.1 แต่เหมือนกันกับ 5.5):
[... ] เมื่อคุณเพิ่มข้อ จำกัด foreign key ให้กับตารางโดยใช้ ALTER TABLE อย่าลืมสร้างดัชนีที่จำเป็นก่อน
สำหรับผู้ที่กำลังมองหาคำพูดจาก5.7
เอกสาร :
MySQL ต้องการดัชนีในคีย์ต่างประเทศและรหัสอ้างอิงเพื่อให้การตรวจสอบคีย์ต่างประเทศนั้นรวดเร็วและไม่ต้องใช้การสแกนตาราง ในตารางอ้างอิงจะต้องมีดัชนีที่คอลัมน์คีย์ต่างประเทศจะแสดงรายการเป็นคอลัมน์แรกในลำดับเดียวกัน ดัชนีดังกล่าวจะถูกสร้างขึ้นในตารางอ้างอิงโดยอัตโนมัติหากไม่มีอยู่ ดัชนีนี้อาจถูกลดลงอย่างเงียบ ๆ ในภายหลังหากคุณสร้างดัชนีอื่นที่สามารถใช้เพื่อบังคับใช้ข้อ จำกัด foreign key index_name ถ้ากำหนดจะถูกใช้ตามที่อธิบายไว้ก่อนหน้านี้
ตามที่ระบุไว้สำหรับ InnoDB ตอนแรกฉันคิดว่ามันแปลกที่คนอื่น ๆ (โดยเฉพาะ MS SQL และ DB2) ไม่ได้ การสแกน TableSpace นั้นดีกว่าการสแกนดัชนีเมื่อมีแถวของตารางน้อยมาก - ดังนั้นสำหรับกรณีส่วนใหญ่คีย์ต่างประเทศจะต้องการทำดัชนี ถ้าอย่างนั้นฉันจะตี - นี่ไม่ได้หมายความว่ามันจะต้องเป็นดัชนีแบบสแตนด์อโลน (หนึ่งคอลัมน์) - มันอยู่ที่ไหนในดัชนี FK อัตโนมัติของ MySQL ดังนั้นอาจเป็นเพราะ MS SQL, DB2 (Oracle ฉันไม่แน่ใจ) และปล่อยให้ DBA; หลังจากดัชนีหลายรายการทั้งหมดในตารางขนาดใหญ่อาจทำให้เกิดปัญหากับประสิทธิภาพและพื้นที่
ใช่Innodb
ระบุสิ่งนี้ คุณสามารถใส่ชื่อคีย์ต่างประเทศหลังจากFOREIGN KEY
ประโยคหรือปล่อยให้ MySQL สร้างชื่อให้คุณ MySQL สร้างดัชนีโดยอัตโนมัติด้วยforeign_key_name
ชื่อ
CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name (columns)
REFERENCES parent_table(columns)
ON DELETE action
ON UPDATE action
ใช่ Mysql ดัชนีคีย์ต่างประเทศโดยอัตโนมัติเมื่อคุณสร้างตารางที่มีรหัสต่างประเทศอื่น
ไม่สามารถรับรหัสดัชนีได้โดยอัตโนมัติ
ALTER TABLE (NAME OF THE TABLE) ADD INDEX (FOREIGN KEY)
ชื่อของตารางที่คุณได้สร้างตัวอย่างเช่นรูปถ่ายและต่างประเทศ KEY photograph_id
ตัวอย่างเช่น รหัสควรเป็นเช่นนี้
ALTER TABLE photographs ADD INDEX (photograph_id);