TSQL索引碎片查询返回混乱的数据

时间:2012-06-08 19:58:17

标签: sql-server tsql fragmentation

我有一个非常简单的标准查询来向我展示数据库中索引的碎片,如下所示:

SELECT  DB_NAME(DB_ID()) AS DatabaseName,
    OBJECT_NAME(ddips.[object_id]) AS TableName,
    ind.[name] AS IndexName,
    ddips.index_type_desc AS IndexType,
    ddips.avg_fragmentation_in_percent AS FragmentationPercentage,
    ddips.fragment_count AS FragmentCount,
    ddips.avg_fragment_size_in_pages AS AvgFragmentSizeInPages,
    ddips.page_count AS [PageCount]
FROM    sys.dm_db_index_physical_stats (DB_ID(), null, null, null, null) AS ddips
    INNER JOIN sys.indexes ind on ind.[object_id] = ddips.[object_id]
ORDER BY ddips.avg_fragmentation_in_percent DESC

然而,当我运行它时,我看到完全相同的数据 - 相同的tablename,indexname和indextype - 多次返回,具有不同的碎片百分比。一个例子如下:

Fragmentation

我不明白这些结果。当我在SSMS中打开表时,打开索引,然后转到Fragmentation页面,它告诉我最低的数字是1.71%,是碎片。所有这些其他碎片数字来自哪里?有人可以帮忙解释这些结果吗?非常感谢。

1 个答案:

答案 0 :(得分:2)

您正在对两个视图中的object_id进行连接,这不是唯一值。 object_id的值的多次出现意味着多个行连接。您需要将index_id包含在连接条件中。 编辑:是的,马丁史密斯说的话!