暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

史上最全的--查看当前db所有索引的脚本--

SQLServer爱好者 2021-04-29
594

今天分享的脚本功能是:

返回当前db下所有索引的状态,包括表名、索引名索引类型索引字段包含列的索引字段、填充因子、索引行数、使用的页面数量、索引碎片程度等,几乎涵盖了索引的方方面面;

 

--First, please change thedatabase context to the specified database.

USE ABCD

GO

 

SELECT

   db_name()AS [Database],

   schema_name(o.schema_id) AS [Schema],

   o.name AS [Table],

   o.type_desc AS Table_Type,

   i.index_id,

   ISNULL(i.name,'') AS Index_Name,

   i.type_desc AS Index_Type,

   ISNULL([KeyColumns],'') AS Index_Keys,

   ISNULL([IncludeColumns],'') AS Index_Included_Column,

   CASE i.is_disabled WHEN 1 THEN 'Yes' ELSE '' END AS is_Disabled,

   CASE i.is_unique WHEN 1 THEN 'Yes' ELSE '' END AS is_Unique,

   CASE i.is_primary_key WHEN 1 THEN 'Yes' ELSE '' END AS is_Primary_Key,

   i.fill_factor,

   ISNULL([RowCount],'') AS Row_Count,

   UsedPages,

   ReservedPages,

   dm.partition_number AS partitionnum,

   dm.avg_fragmentation_in_percent ASfrag

FROM sys.objects o

INNER JOIN sys.indexesi ON o.object_id = i.object_id

INNER JOIN sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL , NULL, 'LIMITED') dm ON dm.object_id = o.object_id AND dm.index_id = i.index_id

OUTER APPLY(

   SELECT [KeyColumns]= stuff(replace(replace(

        (

            SELECTc.name + CASE WHEN is_descending_key = 1THEN ' desc' ELSE '' END AS [ColumnName]

            FROMsys.index_columns ic JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id

            WHEREic.is_included_column =0 AND ic.object_id = i.object_id AND ic.index_id = i.index_id

            ORDERBY ic.index_column_id

            FORXML AUTO

       ), '<icColumnName="', ','), '"/>', ''), 1, 1, '')

   ) AS T_KeyCol

OUTER APPLY(

   SELECT [IncludeColumns]= stuff(replace(replace(

        (

            SELECTc.name AS [ColumnName]

            FROMsys.index_columns ic JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id

            WHEREic.is_included_column =1 AND ic.object_id = i.object_id AND ic.index_id = i.index_id

            ORDERBY ic.index_column_id

            FORXML AUTO

       ), '<cColumnName="', ','), '"/>', ''), 1, 1, '')

   ) AS T_IncCol

OUTER APPLY(

   SELECT [RowCount]= SUM(row_count),  [UsedPages] = SUM(used_page_count), [ReservedPages] = SUM(reserved_page_count)

       FROM sys.dm_db_partition_statsddps

       WHERE ddps.object_id = i.object_id AND ddps.index_id = i.index_id

   ) AS T_Size

WHERE o.type_desc IN('USER_TABLE','VIEW') 

ORDER BY 1,2,4,3,5


还不拷走try try try?



文章转载自SQLServer爱好者,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论