ประสิทธิภาพของคีย์หลักคอมโพสิตเป็นคีย์ต่างประเทศ


12

ฉันมีตารางที่มีคีย์หลักคอมโพสิต (ประกอบด้วย 4 คอลัมน์) ซึ่งใช้เพื่อให้แน่ใจว่าไม่มีรายการที่ซ้ำกันถูกป้อนลงในตาราง ตอนนี้ฉันต้องการโต๊ะใหม่ซึ่งจะต้องอ้างอิงคีย์ในตารางนี้เป็นคีย์ต่างประเทศ

คำถามของฉันคือวิธีใดที่มีประสิทธิภาพมากกว่าสำหรับความเร็วการค้นหา:

1) ฉันจะสร้างตารางใหม่รวมทั้งคอลัมน์ทั้ง 4 และอ้างอิงพวกเขาทั้งหมดในคีย์ต่างประเทศ

หรือ

2) ฉันจะสร้างคอลัมน์ข้อมูลประจำตัวใหม่ในตารางคีย์หลักและใช้เป็นคีย์ต่างประเทศในตารางใหม่หรือไม่

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


1
โดยส่วนตัวฉันมักจะใช้คีย์ตัวแทน (เช่นINT IDENTITY) ในกรณีดังกล่าว - ทำให้การอ้างอิงและเข้าร่วมตารางนั้นง่ายขึ้นมาก หากต้องการหลีกเลี่ยงการซ้ำให้วางข้อ จำกัดUNIQUEไว้ในคอลัมน์ทั้งสี่ นอกจากนี้: คีย์หลักแคบเป็นที่ดีมากสำหรับเหตุผลประสิทธิภาพ (ถ้าพวกเขากำลังใช้เป็นกุญแจสำคัญในการจัดกลุ่ม)
marc_s

คำตอบ:


11

ค่าใช้จ่ายในการใช้เลขจำนวนเต็มสังเคราะห์อย่างง่ายของ PK มีขนาดเล็กและประโยชน์ในกรณีของคุณอาจจะค่อนข้างมาก

  • ในขณะที่คุณชี้ให้เห็นคุณจะมีความสัมพันธ์ FK ง่ายกว่ามาก
  • PK ขนาดเล็กทำให้ดัชนีเล็ก (และเร็ว) พื้นที่ตารางรวมของคุณอาจจะน้อยลงโดยการเพิ่มคอลัมน์ดังกล่าว
  • หากกฎทางธุรกิจเปลี่ยนแปลงไปคุณจะไม่ต้องเรียงลำดับตารางใหม่

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


5

บ่อยครั้งในโลก SQL คำตอบคือ: "ขึ้นอยู่กับ"

ดูคำถามนี้สำหรับตัวชี้บางตัว: คีย์ธรรมชาติให้ประสิทธิภาพที่สูงขึ้นหรือต่ำลงใน SQL Server มากกว่าปุ่มจำนวนเต็มตัวแทนหรือไม่?

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

หากคุณแนะนำคอลัมน์ประจำตัวฉันจะทำให้มันเป็นคีย์หลักและเปลี่ยนคอลัมน์ "ธรรมชาติ" เป็นข้อ จำกัด ที่ไม่ซ้ำกันแทน

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