เมื่อคุณทำการแทรกและลบการอัพเดตดัชนีของคุณจะถูกแยกส่วนทั้งภายในและภายนอก
การแตกแฟรกเมนต์ภายในคือคุณมีพื้นที่ว่างสูงในหน้าดัชนีซึ่งหมายความว่า SQL Server จำเป็นต้องอ่านหน้าเพิ่มเติมเมื่อทำการสแกนดัชนี
การแตกแฟรกเมนต์ภายนอกคือเมื่อหน้าของดัชนีไม่อยู่ในลำดับใด ๆ ดังนั้น SQL Server ต้องทำงานมากขึ้นโดยเฉพาะในแง่ของ IO เพื่ออ่านดัชนี
หากดัชนีของคุณมีการแยกส่วนที่ดีที่สุดแบบสอบถามของคุณจะมีประสิทธิภาพน้อยลง แต่ที่แย่ที่สุด SQL Server จะหยุดใช้ดัชนีทั้งหมดเข้าด้วยกันซึ่งหมายความว่าแบบสอบถามทั้งหมดจะต้องทำการสแกนตารางหรือสแกนดัชนีแบบกลุ่ม สิ่งนี้จะทำร้ายการแสดงของคุณมาก!
เมื่อคุณจัดระเบียบดัชนีใหม่แล้ว SQL Server จะใช้หน้าดัชนีที่มีอยู่และเพียงแค่สับข้อมูลรอบอายุเหล่านั้น สิ่งนี้จะช่วยลดการกระจายตัวของภายในและยังสามารถกำจัดการกระจายตัวภายนอกเล็กน้อย มันเป็นการทำงานที่มีน้ำหนักเบากว่าการสร้างใหม่และออนไลน์อยู่เสมอ
เมื่อคุณสร้างดัชนีขึ้นใหม่ SQL Server จะนำข้อมูลของดัชนีมาใช้จริงและใช้ชุดหน้าดัชนีใหม่ สิ่งนี้จะช่วยบรรเทาการกระจายตัวของข้อมูลภายในและภายนอกอย่างชัดเจน แต่เป็นการดำเนินการที่มีน้ำหนักมากและโดยค่าเริ่มต้นจะทำให้ดัชนีออฟไลน์แม้ว่าจะสามารถดำเนินการเป็นการออนไลน์ได้ขึ้นอยู่กับรุ่นและการตั้งค่า SQL Server ของคุณ
โปรดอย่าคาดหวังว่าจะมีการแตกแฟรกเมนต์ 0 หลังจากสร้างใหม่ ถ้าคุณใช้คำแนะนำการค้นหา MAXDOP, SQL Server จะขนานการดำเนินการสร้างใหม่และตัวประมวลผลเพิ่มเติมที่เกี่ยวข้องการกระจายตัวที่มีความเป็นไปได้มากขึ้นเพราะแต่ละหน่วยประมวลผลหรือคอร์จะสร้างส่วนหรือส่วนของดัชนีแยกกันโดยไม่คำนึงถึง ซึ่งกันและกัน นี่เป็นการแลกเปลี่ยนระหว่างระดับการแยกส่วนที่ดีที่สุดและเวลาที่ใช้ในการสร้างดัชนีใหม่ สำหรับการแตกแฟรกเมนต์ใกล้ 0 ให้ใช้ MAXDOP 1 และเรียงลำดับผลลัพธ์ใน TempDB