ฉันใช้สคริปต์ Ola Hallengrens สำหรับการบำรุงรักษาดัชนี ก่อนที่ฉันจะทำอย่างนั้นฉันใช้แบบสอบถามต่อไปนี้เพื่อดูว่าดัชนีใดที่มีการแยกส่วนมากที่สุด:
SELECT dbschemas.[name] as 'Schema',
dbtables.[name] as 'Table',
dbindexes.[name] as 'Index',
indexstats.avg_fragmentation_in_percent,
indexstats.page_count
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats
INNER JOIN sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id]
INNER JOIN sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id]
INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id]
AND indexstats.index_id = dbindexes.index_id
ORDER BY indexstats.avg_fragmentation_in_percent desc
ในกรณีของฉัน avg_fragmentation มากกว่า70%สำหรับ15ดัชนีและมากกว่า30%สำหรับ28ดัชนี
ดังนั้นฉันสร้างทุกดัชนีใหม่โดยใช้โซลูชันของ Ola Hallengren เมื่อฉันเรียกใช้แบบสอบถามอีกครั้งนี่เป็นผลลัพธ์:
การกระจายตัวของมากกว่า70%สำหรับ12ดัชนีมากกว่า30%สำหรับ15ดัชนี
ฉันคิดว่าเหตุผลก็เพราะpage_count
ซึ่งต่ำกว่า 1,000 สำหรับแต่ละดัชนีที่ยังมีการแยกส่วนมาก ตัวอย่างเช่นหนึ่งในดัชนีที่มี
page_count
967 มีเปอร์เซ็นต์การกระจายตัวของ98,98% ! สำหรับฉันแล้วดูเหมือนว่าคุ้มที่จะสร้างดัชนีนั้นใหม่! ผมและหลังจากนั้นการกระจายตัวเป็น0% นอกจากนี้ดัชนีที่มีpage_count
132 ก็เปลี่ยนจาก95%เป็น0%
ดังนั้นคำถามของฉันคือเหตุผลอะไรที่จะไม่สร้างดัชนีเหล่านั้นใหม่ เหตุผลหนึ่งอาจเป็นเพราะการสร้างใหม่เสียเวลาและทรัพยากร แต่เนื่องจากดัชนีมีขนาดเล็กนี่ไม่ได้หมายความว่ามันมีค่าใช้จ่ายค่อนข้างน้อยและมันก็ยังคงเป็นประโยชน์สำหรับการสร้างใหม่อยู่ดี?
มีคำถามที่เกี่ยวข้องหลายรายการในเว็บไซต์นี้ แต่ทั้งหมดตอบคำถามว่าทำไมดัชนีจะไม่ดีแฟรกเมนต์หรือถ้าดัชนียังคงมีประโยชน์หากพวกเขามีขนาดเล็กและคุณไม่ได้จัดระเบียบพวกเขาในขณะที่ที่นี่คำสั่งจะลดการกระจายตัว คำถามคือทำไมไม่ทำมันต่อไป?