เรามีตารางขนาดใหญ่[MyTable]ซึ่งปัจจุบันมีทั้งPrimary Key, และUnique Non Clustered Indexในคอลัมน์เดียวกัน ( [KeyColumn]) ดัชนี U NC ยังมีคอลัมน์ครอบคลุมเพิ่มเติม
การมีทั้ง PK และดัชนี NC ที่ไม่ซ้ำกันในคอลัมน์เดียวกันดูเหมือนซ้ำซ้อนดังนั้นฉันจึงกำลังพิจารณาลบคีย์หลักและใช้ดัชนีที่ไม่ได้ทำคลัสเตอร์ที่ไม่ซ้ำกันเพื่อจุดประสงค์ในการอ้างอิงความสมบูรณ์
โปรดทราบว่าตารางจะทำคลัสเตอร์โดยคอลัมน์อื่นทั้งหมด
ie ดังนั้นเรามี:
ALTER TABLE [MyTable]
ADD CONSTRAINT [PK_MyTable]
PRIMARY KEY NONCLUSTERED ([KeyColumn])
GO
และ
CREATE UNIQUE NONCLUSTERED INDEX [IX_MyTable_SomeIndex]
ON [MyTable] ([KeyColumn])
INCLUDE ([Column1], [Column2])
GO
เท่าที่ฉันรู้มันเป็นไปไม่ได้ที่จะเพิ่มคอลัมน์ครอบคลุมลงในคีย์หลักดังนั้นฉันตั้งใจจะทำ:
- ปล่อยข้อ จำกัด ของ Foreign Key ให้ไว้
MyTable.KeyColumn - วางคีย์หลักบน
MyTable.KeyColumnทั้งหมด - เพิ่มคีย์ต่างประเทศลงในตาราง (เช่น RI จะถูกบังคับใช้ผ่าน
MyTable.KeyColumn)
ความหมายเดียวที่ฉันสามารถทำได้คือเราจะไม่ได้รับสัญลักษณ์ภาพสัญลักษณ์ในแผนภาพ ERD ของเราและความหนาแน่นของดัชนี (ใบไม้) จะน้อยลงเนื่องจากคอลัมน์ที่รวมอยู่
ฉันได้อ่าน/programming/487314/primary-key-or-unique-indexและมีความสุขกับความสมบูรณ์และประสิทธิภาพของการทำสิ่งนี้
คำถามของฉันคือ: วิธีการนี้มีข้อบกพร่องหรือไม่?
แก้ไข สิ่งที่ฉันพยายามที่จะบรรลุผลการดำเนินงานและการเพิ่มประสิทธิภาพการทำความสะอาดฤดูใบไม้ผลิ โดยการลบ PK หรือดัชนีจะมีหน้าน้อยลงสำหรับดัชนีของฉัน = การเขียนที่เร็วขึ้นรวมถึงผลประโยชน์การบำรุงรักษา / การดำเนินงานเช่นดัชนีที่น้อยลงเพื่อให้มีการดีแฟรกเป็นต้น
เพื่อให้พื้นหลังนี้ฉันไม่เคยมีตารางที่ถูกอ้างอิงโดยไม่ต้อง PK อย่างไรก็ตามความจริงที่ว่ามีการเพิ่มดัชนี NC พร้อมคอลัมน์ครอบคลุมลงในตารางหมายความว่าฉันต้องปรับความคิดของฉัน