มีความแตกต่างที่มีตัวตนระหว่างดัชนีคลัสเตอร์ที่ไม่ซ้ำกันและคีย์หลักที่คลัสเตอร์หรือไม่


17

ฉันเข้าใจว่าอาจมีความแตกต่างในความหมายหรือเจตนาระหว่างทั้งสอง แต่มีความแตกต่างด้านพฤติกรรมหรือประสิทธิภาพระหว่างคีย์หลักที่คลัสเตอร์และดัชนีที่ไม่ซ้ำกันหรือไม่

คำตอบ:


15

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

โอ้และความจริงที่ว่าตารางสามารถมีหนึ่ง PK และสหราชอาณาจักรจำนวนมาก :-)

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


ดังนั้นจึงไม่มีเหตุผลที่จะใช้ PK ยกเว้น (A) เป็นนามแฝงสำหรับNOT NULL UNIQUE CLUSTEREDหรือ (B) เพื่อเน้นว่า UQ ที่เจาะจงคือ "พิเศษ" ในแง่ของข้อมูลเมตาถึงแม้ว่า RDMS นั้นเป็นผู้ไม่เชื่อเรื่องพระเจ้า?
Jon of All Trades

ใช่ฉันชอบตัวเลือก B ด้วยตัวเอง :-)
แมเรียน

มีเหตุผลคือ - หยุดคุณโดยใช้ค่าพิเศษ NULL ที่ไม่เหมาะสม!
JamesRyan

@JamesRyan: ถูกปกคลุมด้วยเหตุผลของจอนแห่งการค้า #A
Andriy M

1
@JamesRyan: ใช่ระหว่างPRIMARY KEYและNOT NULL UNIQUEอดีตจะยากมากที่จะกลายเป็นNULL UNIQUE(โดยเฉพาะอย่างยิ่งหากมีการอ้างอิงข้อ จำกัด โดยคีย์ต่างประเทศแล้ว) แน่นอนจะป้องกันการเปลี่ยนแปลงอุบัติเหตุจากการNOT NULL NULL
Andriy M

8

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

ดัชนีคลัสเตอร์ที่ไม่ซ้ำมีตัวระบุเฉพาะที่ต้องจัดการกับค่าที่ไม่ซ้ำกัน


คุณหมายถึงว่าดัชนีเพิ่มเติมในตารางนั้นชี้ไปยังแถวในดัชนีคลัสเตอร์โดยตรงโดยไม่สนใจดัชนีที่สร้างโดยคีย์หลักหรือไม่
bernd_k

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