Sql server 2005 如何查找统计信息为ON的索引

Sql server 2005 如何查找统计信息为ON的索引,sql-server-2005,Sql Server 2005,我正在寻找一个SQL Server 2005查询,该查询将列出所有索引及其各自的统计值。我在sysindexes中没有看到与该值对应的任何明显值。该列为no\u recompute,其中 每个索引都将有一个具有相同名称和ID(sys.indexes.object_ID=sys.stats.object_ID和sys.indexes.index_ID=sys.stats.stats_ID)的相应统计行,但并非每个统计行都有相应的索引 因此,sys.index和sys.stats之间的连接将为您匹配

我正在寻找一个SQL Server 2005查询,该查询将列出所有索引及其各自的统计值。我在sysindexes中没有看到与该值对应的任何明显值。

该列为
no\u recompute
,其中

每个索引都将有一个具有相同名称和ID(sys.indexes.object_ID=sys.stats.object_ID和sys.indexes.index_ID=sys.stats.stats_ID)的相应统计行,但并非每个统计行都有相应的索引

因此,sys.index和sys.stats之间的连接将为您匹配索引

原因:

  • 统计信息可以用于列或索引
  • 一个索引只有一个统计量
  • 统计信息\u NORECOMPUTE应用于该索引的统计信息,而不是索引本身

您可以使用以下查询:

select TableName = so.name, 
       IndexName = si.name, 
       StatName = s.name, 
       s.no_recompute
  from sys.indexes si
           inner join sys.stats s on si.object_id = s.object_id
           inner join sys.objects so on si.object_id = so.object_id
  where     no_recompute = 0
        and so.[type] in ('U', 'V')
order by so.name, si.name, s.name

DoubleJ查询在我看来是错误的。您可以使用此查询查找无重新计算索引:

SELECT 
    OBJECT_NAME(i.object_id) AS table_name,
    i.name AS index_name,
    s.name
FROM
    sys.indexes AS i
    LEFT JOIN sys.stats AS s
    ON i.index_id = s.stats_id
    AND i.object_id = s.object_id
WHERE
    s.no_recompute = 1