ฉันมีฐานข้อมูล oltp ทั้งหมดที่ออกแบบโดยใช้คอลัมน์ข้อมูลประจำตัวสำหรับการทำคลัสเตอร์ + pk มันทำงานค่อนข้างเร็วในการแทรก / ค้นหา แต่ฉันได้เห็นปัญหาสองสามข้อ:
1. ตัวเลือกการเติมดัชนีไม่มีประโยชน์เพราะส่วนแทรกเกิดขึ้นเฉพาะตอนท้ายของดัชนี
2. พื้นที่เก็บข้อมูลเพิ่มขึ้น ฉันมีตารางที่มีหลายสิบล้านเรคคอร์ดและ 1 int ใช้พื้นที่ด้วยตัวเอง แต่ละตารางที่มีคอลัมน์ข้อมูลเฉพาะสำหรับ pk จะต้องมีดัชนีอื่นสำหรับการค้นหาทางธุรกิจดังนั้นจึงจำเป็นต้องมีพื้นที่จัดเก็บเพิ่มเติม
3. ความยืดหยุ่น นี่เป็นปัญหาที่เลวร้ายที่สุด เนื่องจากการแทรกทุกครั้งจะไปที่จุดสิ้นสุดของดัชนีการแทรกแต่ละครั้งจะเน้นเฉพาะจุดสิ้นสุดของดัชนี (การจัดสรร io สำหรับการเขียน ฯลฯ ) โดยใช้คีย์ธุรกิจเป็นคีย์การทำคลัสเตอร์คุณสามารถกระจายแทรกอย่างสม่ำเสมอในดัชนี นั่นหมายความว่าคุณเพิ่งกำจัดฮอตสปอตขนาดใหญ่ คุณสามารถใช้ไฟล์เพิ่มเติมสำหรับดัชนีแต่ละไฟล์ในไดรฟ์แยกกันได้อย่างง่ายดายแต่ละไดรฟ์ทำงานแยกกัน
ฉันเริ่มเปลี่ยนตารางจากคอลัมน์ข้อมูลประจำตัวเป็นคีย์ธรรมชาติ (อาจแยกจากกันสำหรับการจัดกลุ่ม & pk) ตอนนี้รู้สึกดีขึ้นแล้ว
ฉันอยากจะแนะนำต่อไปนี้ (อย่างน้อยสำหรับฐานข้อมูล oltp):
1. ใช้เป็นคีย์การจัดกลุ่มคอลัมน์ด้านขวาตามลำดับที่ถูกต้องเพื่อเพิ่มประสิทธิภาพการค้นหาที่บ่อยที่สุด
2. ใช้ pk คอลัมน์ด้านขวาที่เหมาะสมกับตารางของคุณ
หากคีย์คลัสเตอร์ไม่ง่ายและมีตัวอักษร (char [], varchar, nvarchar) ฉันคิดว่าคำตอบคือ 'มันขึ้นอยู่กับ' คุณควรวิเคราะห์ทีละกรณี
ฉันรักษาหลักการต่อไปนี้: ปรับให้เหมาะสมสำหรับเคียวรีที่พบบ่อยที่สุดขณะที่ลดสถานการณ์เคสที่แย่ที่สุด
ฉันเกือบลืมตัวอย่างหนึ่ง ฉันมีตารางบางตัวที่อ้างอิงตัวเอง หากตารางนั้นมีคอลัมน์ข้อมูลประจำตัวสำหรับเป็นคีย์หลักการแทรกหนึ่งแถวอาจต้องการการอัปเดตและการแทรกมากกว่าหนึ่งครั้งในหนึ่งครั้งอาจเป็นเรื่องยากหากไม่สามารถทำได้ (ขึ้นอยู่กับการออกแบบตาราง)