วิธีที่ไม่เจ็บปวดในการสร้างดัชนีคลัสเตอร์บนโต๊ะขนาดใหญ่หรือไม่


22

ดังนั้นเราจึงมีเว็บไซต์ลูกค้าที่ร้องเรียนเกี่ยวกับประสิทธิภาพที่ช้ามาก ฉันลองดูหนึ่งครั้งและเห็นได้ชัดว่าปัญหานี้เกิดขึ้นเนื่องจากSomebody Else (grrrr) ออกแบบตารางที่มีระเบียนมากกว่า 20 ล้านรายการโดยไม่มีดัชนีคลัสเตอร์

ตอนนี้ฉันต้องการสร้างดัชนีคลัสเตอร์บนตารางนั้น - แต่ในสภาพแวดล้อมการทดสอบของฉันcreate indexคำสั่งของฉันทำงานเป็นเวลาหนึ่งชั่วโมงและยังไม่เสร็จ ไซต์ลูกค้าเป็นร้านค้าที่ใช้งานได้ตลอด 24 ชั่วโมงทุกวันและไม่สามารถเสียเวลาลงได้หนึ่งชั่วโมงในขณะที่ฉันสร้างดัชนี

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

เรากำลังใช้ SQL Server Enterprise Edition

คำตอบ:


26
  • หากเซิร์ฟเวอร์ sql ของคุณเป็น Enterprise + edition และตารางไม่มีฟิลด์ BLOB ใด ๆ - CREATE CLUSTERED INDEX ... WITH(ONLINE=ON)

  • หากไม่มี - ไม่มีวิธีใดยกเว้นการสร้างตารางที่มีสคีมาด้านเดียวกันและทำการถ่ายโอนข้อมูลอย่างชาญฉลาดรวมถึงการดำเนินการ INSERT / UPDATE / DELETE ทั้งหมด (โดยใช้ทริกเกอร์เป็นต้น) จากนั้นให้วางตารางเก่าและเปลี่ยนชื่ออย่างถูกต้อง ใหม่ในชื่อเดียวกันกับข้อเสียคือช้าเพิ่มภาระพิเศษให้กับเซิร์ฟเวอร์และที่เก็บข้อมูล


12

ไม่แน่ใจว่าลูกค้าของคุณใช้ SQL เวอร์ชันใด ในองค์กรคุณสามารถสร้างดัชนีด้วย (ONLINE = ON) ดังนั้นตารางจะพร้อมใช้งานจนกว่าดัชนีจะถูกสร้างขึ้น


8
  • สร้างตารางใหม่เหมือนกับของเดิม (จะต้องใช้ชื่ออื่น)
  • สร้างดัชนีคลัสเตอร์บนตารางใหม่
  • โหลดข้อมูลลงในตารางใหม่
  • วางตารางต้นฉบับ
  • เปลี่ยนชื่อตารางใหม่โดยใช้ชื่อเดิม

ตรวจสอบให้แน่ใจว่าคุณใช้การอนุญาตที่จำเป็นจากต้นฉบับ

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