ทำไมดัชนี REBUILD ไม่ลดการแยกส่วนดัชนี?


30

ฉันใช้ ALTER INDEX REBUILD เพื่อลบการแตกแฟรกเมนต์ดัชนี ในบางกรณี REBUILD ดูเหมือนจะไม่ลบการกระจายตัวของนี้ อะไรคือสาเหตุที่ REBUILD ไม่ลบการแยกส่วน? ดูเหมือนว่าสิ่งนี้จะเกิดขึ้นโดยเฉพาะกับดัชนีขนาดเล็ก


ที่เกี่ยวข้อง: dba.stackexchange.com/questions/5365/…
Mark Storey-Smith

คำตอบ:


39

หากดัชนีมีขนาดเล็กมาก (ฉันเชื่อว่าน้อยกว่า 8 หน้า) มันจะใช้ส่วนขยายแบบผสม ดังนั้นมันจะปรากฏราวกับว่ายังมีการแยกส่วนที่เหลืออยู่เนื่องจากขอบเขตที่อยู่อาศัยจะมีหน้าเว็บจากดัชนีหลายรายการ

ด้วยเหตุนี้และความจริงที่ว่าในดัชนีขนาดเล็กที่การแตกแฟรกเมนต์โดยทั่วไปไม่สามารถเพิกเฉยได้คุณควรสร้างดัชนีขึ้นใหม่ด้วยเกณฑ์หน้าเว็บที่แน่นอนเท่านั้น มันเป็นวิธีปฏิบัติที่ดีที่สุดในการสร้างดัชนีการแยกส่วนที่มีอย่างน้อย1,000 หน้า


34

สิ่งนี้สามารถเกิดขึ้นได้กับดัชนีขนาดใหญ่มาก

ฉันมีดัชนีบางตัวในตารางที่มีแถวประมาณ 700 ล้านแถวที่ฉันไม่สามารถจัดเรียงข้อมูลด้านล่างได้ประมาณ 30% ปัญหาไม่เพียงพอต่อเนื่องกันภายในฐานข้อมูลเพื่อจัดเรียงดัชนีอย่างต่อเนื่อง

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


1

ฉันได้ต่อสู้กับสิ่งนี้มานานแล้วและชอบ JNK ฉันแม้ว่าปัญหาจะยังคงมีพื้นที่ว่างและการกระจายตัวของดิสก์ในดิสก์อย่างต่อเนื่อง อย่างไรก็ตามคุณจะทำอย่างไรกับ SSD SAN

ตอนนี้ฉันพบแล้วว่าอาจเป็นความคิดที่ดีที่จะรวมเฉพาะ index_level = 0 นี่คือวิธีที่มันทำในสคริปต์ของ Ola Hallengren

การปรับปรุงก็คือการทำ

 REBUILD With (maxdop = 1)

วิธีนี้ทำให้คุณมั่นใจในการปรับปรุงสูงสุด

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