ต้องการดัชนีสำหรับคีย์ต่างประเทศ


30

ฉันกำลังดิ้นรนกับดัชนีคีย์หลักและคีย์ต่างประเทศ ... และความต้องการของพวกเขาทั้งหมด

ถ้าฉันมีสองตารางทั้งสองจะมีจำนวนเต็มเป็นคีย์หลัก
ตารางแรกอ้างอิงผ่าน FK ไปยังคีย์หลักของตารางที่สอง

  • ในตารางทั้งสองฉันมีดัชนีคีย์หลักในคอลัมน์ ID
  • ฉันสร้างข้อ จำกัด FK ในการtable1.ref_fieldอ้างอิง PK ของตารางที่สอง ( table2.id)
  • และฉันเพิ่มดัชนีบน table1.ref_field

นี่เป็นวิธีที่ดีที่สุดในการจัดระเบียบดัชนีคีย์หลักและคีย์ต่างประเทศหรือไม่

คำตอบ:


30

การออกแบบของคุณดี หากคุณมีปัญหาประสิทธิภาพ (ซึ่งคุณไม่สามารถทราบได้ในขณะออกแบบ) คุณควรสร้างดัชนีในคอลัมน์ table1.ref_field ตามลำดับ (ASC) เดียวกับคอลัมน์ table2.id สิ่งนี้จะปรับปรุงประสิทธิภาพของการรวมระหว่างตารางและคอลัมน์ มีค่าโสหุ้ยในการบำรุงรักษาดัชนีใด ๆ ดังนั้นคุณต้องการชั่งน้ำหนักราคานั้นเทียบกับประโยชน์ของการปรับปรุงประสิทธิภาพ

PostgreSQL ไม่ได้สร้างดัชนีดังกล่าวโดยอัตโนมัติในคอลัมน์คีย์ต่างประเทศที่อ้างอิงคอลัมน์อื่น ๆ โชคไม่ดีดังนั้นคุณต้องทำเอง

นี่คือคำถาม StackOverflow ในหัวข้อเดียวกัน:

Postgres และดัชนีคีย์ต่างประเทศและคีย์หลัก

นี่คือแบบสอบถามเพื่อช่วยกำหนดว่าคุณอาจได้รับประโยชน์จากการเพิ่มดัชนีดังกล่าว:

Postgresql: ดัชนีในคีย์ต่างประเทศ


ไม่ใช่โชคร้ายเสมอไปหากคุณไม่ได้DELETEมาจากตารางอ้างอิงคุณสามารถประหยัด I / O และ CPU จำนวนมากให้หลีกเลี่ยงการคงไว้ซึ่งดัชนีที่ไม่ได้ใช้ ฉันคิดว่ามันควรจะถูกสร้างขึ้นตามค่าเริ่มต้นมีเพียงตัวเลือกในการระงับการสร้าง
Craig Ringer

Craig Ringer ไม่เพียง แต่ DELETE เท่านั้นที่สามารถส่งผลกระทบต่อมันได้หากคุณเลือกจากส่วนของตารางลูกคุณจะมีปัญหาเรื่องประสิทธิภาพด้วย เอกสารนี้จาก Oracle อธิบายเพิ่มเติม: asktom.oracle.com/pls/asktom/ …
777Anon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.