Der er en generel konsensus om, at du bør reorganisere ("defragmentere") dine indekser, så snart indeksfragmenteringen når mere end 5 (nogle gange 10%), og du bør genopbygge dem fuldstændigt, når det går ud over 30% (det er i hvert fald de tal, jeg' har hørt fortalere mange steder).
Michelle Ufford (a.k.a. "SQL Fool") har et automatiseret indeksdefrag-script , som bruger de nøjagtige grænser til at beslutte, hvornår et indeks skal omorganiseres eller genopbygges.
Se også Brad McGehees tips om genopbygning af indekser med nogle gode tanker og tips til, hvordan man håndterer indeksgenopbygning.
Jeg bruger dette script her (kan ikke huske hvornår jeg fik det fra - hvem det end var:mange tak! Virkelig nyttige ting) til at vise indeksfragmenteringen på alle dine indekser i en given database:
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