Det finns en allmän enighet om att du bör omorganisera ("defragmentera") dina index så snart indexfragmenteringen når mer än 5 (ibland 10%), och du bör bygga om dem helt och hållet när det går över 30% (åtminstone det är siffrorna jag" har hört förespråkas på många ställen).
Michelle Ufford (a.k.a. "SQL Fool") har ett automatiskt indexdefragmenteringsskript , som använder de exakta gränserna för att bestämma när ett index ska omorganiseras eller byggas om.
Se även Brad McGehees tips om att bygga om index med några bra tankar och tips om hur man hanterar indexombyggnad.
Jag använder det här skriptet här (minns inte när jag fick det här från - vem det än var:tack! Verkligen användbara saker) för att visa indexfragmenteringen på alla dina index i en given databas:
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