ฉันควรสร้างดัชนีใหม่หลังจากตัดทอน / แทรกขนาดใหญ่หรือไม่


10

ฉันมีขั้นตอนการจัดเก็บที่ตัดทอนบางตารางที่มีแถวประมาณ 1.75M ในแต่ละแถวก่อนที่จะแทรกข้อมูลใหม่ (ขึ้นอยู่กับข้อมูลในตารางอื่น ๆ การคำนวณ ฯลฯ )

โครงร่างพื้นฐานง่ายมาก:

  • ตัดทอนตาราง
  • แทรก 1.75M แถวใน 'batches' ประมาณ 75,000 ต่อเวลา

ฉันสงสัยว่าฉันควรสร้างดัชนีใหม่อีกครั้งอย่างชัดเจนตลอดเวลาในกระบวนการนี้หรือไม่? เช่น

  • ตัดทอนตาราง
  • ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [หรืออะไรที่คล้ายกัน]
  • แทรกแถว 1.75M

หรือบางที

  • ALTER INDEX ALL ON xxx DISABLE
  • ตัดทอนตาราง
  • แทรกแถว 1.75M
  • ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [หรืออะไรที่คล้ายกัน]

ความช่วยเหลือใด ๆ ที่ชื่นชม ... ไม่ใช่ DBA - นักพัฒนาที่รู้ดีว่าฐานข้อมูลของ DB นั้นแม่นยำกว่า!


ข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้างตารางดัชนีที่มีอยู่ในปัจจุบันและลักษณะของข้อมูลที่ถูกแทรก (มันอยู่ในลำดับที่แน่นอนหรือไม่ที่สอดคล้องกับดัชนีคลัสเตอร์) จะช่วยได้ นอกจากนี้ฉันคิดว่าตารางนี้ไม่สามารถใช้งานได้จนกว่ากระบวนการนี้จะทำ? เป็นการดีที่จะทราบว่ามีตัวเลือกสำหรับการนำเข้าจำนวนมาก
Mike Walsh

บางทีคุณควรตัดส่วนแทรกของตารางออกและดูว่าการกระจายตัวของดัชนีของคุณคืออะไรเพื่อดูว่าคุณต้องการหรือไม่
Zane

v: 2008 Standard แหล่งข้อมูลคือตารางการแสดงละครหลายตารางก่อนที่ข้อมูลนี้จะโหลดจาก csv, excel, Oracle และ SQL db อื่น ๆ โครงสร้างตารางเหมือนกันทั้งหมดในขั้นตอนนี้: 6 char ID, 3 char code, 10 cols ของทศนิยม (20,5) คีย์หลักคือ ID + รหัส กำลังโหลดข้อมูลผ่านinsert intoและในขณะนี้ไม่มีorder byส่วนคำสั่ง แต่ฉันสามารถเพิ่มได้ถ้ามันจะช่วยได้อย่างไร ID และรหัสจะถูกจัดทำดัชนีแยกกันเช่นกัน
BlueChippy

คำตอบ:


6

เช่นเดียวกับคำถามส่วนใหญ่ของประเภทนี้มันขึ้นอยู่กับ ไม่น่าเป็นไปได้ที่คุณจะแทรกข้อมูลตามลำดับ "ถูกต้อง" สำหรับดัชนีทั้งหมดที่เกี่ยวข้องซึ่งหมายความว่าดัชนีเหล่านั้นทั้งหมดมีแนวโน้มที่จะพบการแบ่งหน้าจำนวนมากระหว่างกระบวนการแทรก ดังนั้นสมมติว่าคุณกำลังแทรกในลำดับดัชนีแบบกลุ่ม คุณสามารถปิดการใช้งานดัชนีที่ไม่ใช่คลัสเตอร์ทั้งหมด, ตัด, ทำแทรกของคุณแล้วสร้างดัชนีที่ไม่ใช่คลัสเตอร์ทั้งหมดของคุณใหม่ แน่นอนว่าการลองทั้งสองวิธีจะบอกความจริงกับคุณได้เร็วกว่าโดยไม่คำนึงถึงทฤษฎีที่อยู่เบื้องหลัง :)


1

แผนพื้นฐานพร้อมการเปิดใช้งานดัชนีทั้งหมดอาจช้าและอาจส่งผลให้เกิดการแยกส่วน

ALTER INDEX REBUILD บนตารางที่ถูกตัดทอนดังนั้นจึงไม่มีจุดประสงค์ดังนั้นคุณจำเป็นต้องแก้ไขแผนกของคุณมันควรจะเป็น:

  • ตัด
  • แทรก
  • แก้ไขดัชนีที่สร้างใหม่

มันอาจจะช้า แต่อย่างน้อยคุณก็ได้ดัชนีที่คมชัด

แผน B ไม่เป็นไร ทดสอบทั้งสามและดูว่าแบบใดเร็วที่สุดและให้การกระจายตัวของดัชนีน้อยที่สุด จากนั้นตัดสินใจว่าการสร้างใหม่นั้นมีค่าหรือไม่

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