ความรู้ระดับล่างของฉันเกี่ยวกับ SQL (Server 2008) มี จำกัด และขณะนี้ DBA ของเราได้รับการพิสูจน์แล้ว ให้ฉันอธิบาย (ฉันได้กล่าวถึงข้อความที่ชัดเจนด้วยความหวังว่าฉันถูก แต่ถ้าคุณเห็นบางอย่างผิดปกติโปรดบอกฉัน) สถานการณ์:
เรามีโต๊ะที่มี 'คำสั่งศาล' สำหรับผู้คน เมื่อฉันสร้างตาราง (ชื่อ: CourtOrder) ฉันสร้างมันดังนี้:
CREATE TABLE dbo.CourtOrder
(
CourtOrderID INT NOT NULL IDENTITY(1,1), (Primary Key)
PersonId INT NOT NULL,
+ around 20 other fields of different types.
)
จากนั้นฉันใช้ดัชนีที่ไม่ใช่คลัสเตอร์กับคีย์หลัก (เพื่อประสิทธิภาพ) เหตุผลของฉันคือมันเป็นฟิลด์ที่ไม่ซ้ำกัน (คีย์หลัก) และควรจัดทำดัชนีเพื่อจุดประสงค์ในการเลือกเป็นหลักเนื่องจากเรามักจะSelect from table where primary key = ...
จากนั้นฉันใช้ดัชนี CLUSTERED กับ PersonId เหตุผลก็คือเพื่อจัดกลุ่มคำสั่งซื้อสำหรับบุคคลใดบุคคลหนึ่งทางร่างกายเนื่องจากงานส่วนใหญ่ได้รับคำสั่งจากบุคคล ดังนั้น,select from mytable where personId = ...
ตอนนี้ฉันถูกดึงขึ้นมาแล้ว ฉันได้รับแจ้งว่าเราควรใส่ดัชนีคลัสเตอร์ไว้ที่คีย์หลักและดัชนีปกติใน personId มันดูแปลกมากสำหรับฉัน ก่อนอื่นทำไมคุณถึงใส่ดัชนีคลัสเตอร์ในคอลัมน์ที่ไม่ซ้ำกัน? การรวมกลุ่มคืออะไร? นั่นเป็นการเสียค่าดัชนีคลัสเตอร์ใช่หรือไม่? ฉันเชื่อว่าจะใช้ดัชนีปกติในคอลัมน์ที่ไม่ซ้ำกัน นอกจากนี้การจัดกลุ่มดัชนียังหมายความว่าเราไม่สามารถจัดกลุ่มคอลัมน์อื่นได้ (หนึ่งคอลัมน์ต่อตารางใช่ไหม)
เหตุผลที่ฉันบอกว่าฉันทำผิดพลาดคือพวกเขาเชื่อว่าการใส่ดัชนีคลัสเตอร์บน PersonId จะทำให้การแทรกช้าลง สำหรับความเร็วที่เพิ่มขึ้น 5% ของการเลือกเราจะได้รับการลดลง 95% ของความเร็วในการแทรกและการอัปเดต ถูกต้องและใช้ได้หรือไม่
พวกเขากล่าวว่าเนื่องจากเรารวมกลุ่ม personId SQL Server จึงต้องจัดเรียงข้อมูลใหม่เมื่อเราแทรกหรือเปลี่ยนแปลง PersonId
ดังนั้นฉันจึงถามว่าทำไม SQL ถึงมีแนวคิดของ CLUSTERED INDEX ถ้ามันช้าขนาดนี้? ช้าอย่างที่พูดหรือเปล่า ฉันควรตั้งค่าดัชนีของฉันอย่างไรเพื่อให้ได้ประสิทธิภาพสูงสุด ฉันคิดว่า SELECT ถูกใช้มากกว่า INSERT ... แต่พวกเขาบอกว่าเรากำลังมีปัญหาในการล็อค INSERTS ...
หวังว่าจะมีคนช่วยฉันได้