Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Query sull'indice di ricostruzione di SQL Server

Ciao

Tutti gli indici nel database di SQL Server verranno frammentati Dopo che le tabelle correlate hanno ricevuto molti aggiornamenti, eliminare le transazioni.

Se l'indice nella tabella è frammentato, tutte le transazioni relative a quella tabella saranno molto lente. Quindi il DBA di SQL Server dovrebbe monitorare frequentemente gli indici e quali indici sono frammentati e quali non sono come lo screenshot seguente.

Puoi controllare l'indice frammentato con il seguente script. Digitare il nome del database di SQL ServerSQL Server è corretto nella prima riga, quindi la query troverà gli indici frammentati.

declare @db int
select @db=DB_ID('DEVECI')
select 'ALTER INDEX [' + i.name +'] on '+OBJECT_NAME(s.object_id)+' REBUILD WITH (ONLINE = ON)',
objname = OBJECT_NAME(s.object_id),
s.object_id,
index_name= i.name,
index_type_desc, 
avg_fragmentation_in_percent
from sys.dm_db_index_physical_stats(@db,null,null,null,null) as s
join sys.indexes i on i.object_id = s.object_id and i.index_id = s.index_id 
where avg_fragmentation_in_percent>30
order by avg_fragmentation_in_percent desc, page_count desc;