subject:Page Splits และ Fragmentation
content:> เมื่อมีการจัดเก็บข้อมูลแถวใหม่เข้าไป ทำให้ต้องมีการจัดลำดับ Indexes Page ใหม่ทุกครั้ง
> โดยความยุ่งยากของการทำงานนี้ ได้แก่ เมื่อ Indexes Page ได้จัดเก็บข้อมูลไว้เต็มแล้ว ทำให้ต้องมีการแยก
ออกมาเป็น Page ใหม่ ( หรือเรียกว่า Page Splits ) ซึ่งเป็นการต่อยอดระหว่าง Page เดิมกับ Page ใหม่เท่าๆกัน
อีกทั้งการทำ Page Split นั้นอาจจะมีผลกระทบไปยัง Page อื่นๆอีกด้วย ซึ่งทำให้เกิด Page Splits ต่อๆไปตามลำดับ
สำหรับวิธีการลดการเกิด Page Split ทำได้โดยการกำหนดค่า Fill Factor เพื่อใช้กันพื้นที่ส่วนหนึ่ง
ไว้ให้กับค่า Indexes ที่ถูก Insert เข้าไป
> เมื่อมีการลบข้อมูลแล้ว ถ้ามีการกำหนดค่า Fill Factor เพื่อกันที่ว่างไว้อยู่เป็นจำนวนมาก
จะทำให้เกิดลักษณะที่เรียกว่า Fragmentation อันเป็นผลทำให้ประสิทธิภาพการค้นหาไม่ดีเท่าที่ควร
เนื่องจากระบบต้องไล่หาข้อมูลในแต่ละ Page ที่มีข้อมูลอยู่น้อย โอกาสที่จะพบข้อมูลในระดับลึกๆ
ต้องเสียเวลาจำนวนมาก
> วิธีการของการปรับปรุงประสิทธิภาพที่ดีที่สุดหลังพบว่ามี Fragmentation ก็คือการลบ Indexes แล้วสร้างใหม่
แต่วิธีการนี้จะยังเพิ่ม Overhead ให้กับระบบมากขึ้น สำหรับตารางที่มีข้อมูลอยู่เป็นจำนวนมาก
และหากว่ามีทั้ง Clustered Indexes และ Non-Clustered Indexes อยู่ด้วยกัน แล้วมีการลบ Clustered Indexes ทิ้ง
จะทำให้ Non-Clustered Indexes ต้องจัดโครงสร้างใหม่ เพื่อแก้ไขข้อมูลในระดับ Leaf ให้ Pointer ไปที่แถวข้อมูลของตารางจริง
และเมื่อทำการสร้าง Clustered Indexes ขึ้นมาอีกที จะทำให้ Leaf ของ Non-Clustered Indexes ต้องกลับไป
Pointer ที่ Leaf ของ Clustered Indexes อีกครั้ง