2014-07-09

DBのチューニングねた


某シアトルの会社のDBを使っている際のネタ。
統計情報ってインデックスにも影響されるということらしい。

with index_stat as (
    select *
    from sys.dm_db_index_physical_stats(DB_ID(N'ALM'), NULL, NULL, NULL, NULL)
)
select
     C.schema_id
    ,A.object_id table_id
    ,B.object_id index_id
    ,C.name schema_name
    ,A.name table_name
    ,B.name index_name
    ,D.avg_fragmentation_in_percent
    ,'ALTER INDEX [' + B.name + '] ON [' + C.name + '].[' + A.name + '] REBUILD;'
from sys.tables as A
    inner join sys.indexes as B on (B.object_id = A.object_id)
    inner join sys.schemas as C on (C.schema_id = A.schema_id)
    inner join index_stat  as D on (D.object_id = B.object_id AND D.index_id = B.index_id)
where A.type='U'
order by D.avg_fragmentation_in_percent DESC;