ฉันใช้ ALTER INDEX REBUILD เพื่อลบการแตกแฟรกเมนต์ดัชนี ในบางกรณี REBUILD ดูเหมือนจะไม่ลบการกระจายตัวของนี้ อะไรคือสาเหตุที่ REBUILD ไม่ลบการแยกส่วน? ดูเหมือนว่าสิ่งนี้จะเกิดขึ้นโดยเฉพาะกับดัชนีขนาดเล็ก
ฉันใช้ ALTER INDEX REBUILD เพื่อลบการแตกแฟรกเมนต์ดัชนี ในบางกรณี REBUILD ดูเหมือนจะไม่ลบการกระจายตัวของนี้ อะไรคือสาเหตุที่ REBUILD ไม่ลบการแยกส่วน? ดูเหมือนว่าสิ่งนี้จะเกิดขึ้นโดยเฉพาะกับดัชนีขนาดเล็ก
คำตอบ:
หากดัชนีมีขนาดเล็กมาก (ฉันเชื่อว่าน้อยกว่า 8 หน้า) มันจะใช้ส่วนขยายแบบผสม ดังนั้นมันจะปรากฏราวกับว่ายังมีการแยกส่วนที่เหลืออยู่เนื่องจากขอบเขตที่อยู่อาศัยจะมีหน้าเว็บจากดัชนีหลายรายการ
ด้วยเหตุนี้และความจริงที่ว่าในดัชนีขนาดเล็กที่การแตกแฟรกเมนต์โดยทั่วไปไม่สามารถเพิกเฉยได้คุณควรสร้างดัชนีขึ้นใหม่ด้วยเกณฑ์หน้าเว็บที่แน่นอนเท่านั้น มันเป็นวิธีปฏิบัติที่ดีที่สุดในการสร้างดัชนีการแยกส่วนที่มีอย่างน้อย1,000 หน้า
สิ่งนี้สามารถเกิดขึ้นได้กับดัชนีขนาดใหญ่มาก
ฉันมีดัชนีบางตัวในตารางที่มีแถวประมาณ 700 ล้านแถวที่ฉันไม่สามารถจัดเรียงข้อมูลด้านล่างได้ประมาณ 30% ปัญหาไม่เพียงพอต่อเนื่องกันภายในฐานข้อมูลเพื่อจัดเรียงดัชนีอย่างต่อเนื่อง
เพื่อหลีกเลี่ยงดัชนีที่มีขนาดใหญ่มากซึ่งจะไม่จัดเรียงข้อมูลทางออกที่ดีที่สุดคือการปรับขนาดฐานข้อมูลใหม่และย้ายวัตถุทั้งหมดของคุณไปยังฐานข้อมูลนั้นจากนั้นสร้างดัชนีของคุณใหม่ที่นั่น
ฉันได้ต่อสู้กับสิ่งนี้มานานแล้วและชอบ JNK ฉันแม้ว่าปัญหาจะยังคงมีพื้นที่ว่างและการกระจายตัวของดิสก์ในดิสก์อย่างต่อเนื่อง อย่างไรก็ตามคุณจะทำอย่างไรกับ SSD SAN
ตอนนี้ฉันพบแล้วว่าอาจเป็นความคิดที่ดีที่จะรวมเฉพาะ index_level = 0 นี่คือวิธีที่มันทำในสคริปต์ของ Ola Hallengren
การปรับปรุงก็คือการทำ
REBUILD With (maxdop = 1)
วิธีนี้ทำให้คุณมั่นใจในการปรับปรุงสูงสุด