Il existe un consensus général sur le fait que vous devez réorganiser ("défragmenter") vos index dès que la fragmentation de l'index atteint plus de 5 (parfois 10%), et vous devez les reconstruire complètement lorsqu'elle dépasse 30% (du moins c'est les chiffres que j'ai ai entendu préconisé dans beaucoup d'endroits).
Michelle Ufford (alias "SQL Fool") a un script de défragmentation d'index automatisé , qui utilise ces limites exactes pour décider quand réorganiser ou reconstruire un index.
Consultez également les les conseils de Brad McGehee sur la reconstruction des index avec quelques bonnes idées et conseils sur la façon de gérer la reconstruction de l'index.
J'utilise ce script ici (je ne me souviens plus quand je l'ai reçu - qui que ce soit :merci beaucoup ! Des trucs vraiment utiles) pour afficher la fragmentation d'index sur tous vos index dans une base de données donnée :
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