Er is een algemene consensus dat u uw indices moet reorganiseren ("defragmenteren") zodra de indexfragmentatie meer dan 5 (soms 10%) bereikt, en dat u ze volledig opnieuw moet opbouwen wanneer deze verder gaat dan 30% (tenminste dat zijn de cijfers die ik' heb het op veel plaatsen gehoord).
Michelle Ufford (ook bekend als "SQL Fool") heeft een automatisch indexdefrag-script , die die exacte limieten gebruikt om te beslissen wanneer een index moet worden gereorganiseerd of opnieuw moet worden opgebouwd.
Zie ook Brad McGehee's tips over het opnieuw opbouwen van indexen met enkele goede gedachten en tips over hoe om te gaan met het opnieuw opbouwen van indexen.
Ik gebruik dit script hier (kan me niet herinneren wanneer ik dit heb gekregen - van wie het ook was:hartelijk dank! Echt nuttige dingen) om de indexfragmentatie op al uw indices in een bepaalde database weer te geven:
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