Có một sự đồng thuận chung rằng bạn nên tổ chức lại ("chống phân mảnh") các chỉ số của mình ngay khi phân mảnh chỉ mục đạt hơn 5 (đôi khi 10%) và bạn nên xây dựng lại chúng hoàn toàn khi nó vượt quá 30% (ít nhất đó là con số tôi ' đã được nghe ủng hộ ở rất nhiều nơi).
Michelle Ufford (còn gọi là "SQL Fool") có tập lệnh chống phân mảnh chỉ mục tự động , sử dụng các giới hạn chính xác đó để quyết định thời điểm tổ chức lại hoặc xây dựng lại một chỉ mục.
Ngoài ra, hãy xem mẹo của Brad McGehee về xây dựng lại chỉ mục với một số suy nghĩ và mẹo hay về cách đối phó với việc xây dựng lại chỉ mục.
Tôi sử dụng tập lệnh này ở đây (không thể nhớ tôi lấy nó từ khi nào - dù là ai:cảm ơn rất nhiều! Công cụ thực sự hữu ích) để hiển thị phân mảnh chỉ mục trên tất cả các chỉ số của bạn trong một cơ sở dữ liệu nhất định:
SELECT
t.NAME 'Table name',
i.NAME 'Index name',
ips.index_type_desc,
ips.alloc_unit_type_desc,
ips.index_depth,
ips.index_level,
ips.avg_fragmentation_in_percent,
ips.fragment_count,
ips.avg_fragment_size_in_pages,
ips.page_count,
ips.avg_page_space_used_in_percent,
ips.record_count,
ips.ghost_record_count,
ips.Version_ghost_record_count,
ips.min_record_size_in_bytes,
ips.max_record_size_in_bytes,
ips.avg_record_size_in_bytes,
ips.forwarded_record_count
FROM
sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED') ips
INNER JOIN
sys.tables t ON ips.OBJECT_ID = t.Object_ID
INNER JOIN
sys.indexes i ON ips.index_id = i.index_id AND ips.OBJECT_ID = i.object_id
WHERE
AVG_FRAGMENTATION_IN_PERCENT > 0.0
ORDER BY
AVG_FRAGMENTATION_IN_PERCENT, fragment_count