Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

À quelle fréquence les index doivent-ils être reconstruits dans notre base de données SQL Server ?

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