如何查找具有statistics_norecompute = ON的索引

时间:2011-06-02 12:08:20

标签: sql-server-2005

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

3 个答案:

答案 0 :(得分:8)

sys.stats中的列no_recompute表示

  

每个索引都有一个具有相同名称和ID的相应统计信息行(sys.indexes.object_id = sys.stats.object_id AND sys.indexes.index_id = sys.stats.stats_id),但并非每个统计信息行都有相应的指数。

因此,sys.indexes和sys.stats之间的JOIN将匹配您的索引

原因:

  • 统计信息可以用于列或索引
  • 索引只有一个统计信息。
  • STATISTICS_NORECOMPUTE适用于该索引的统计信息,而不是索引本身

答案 1 :(得分:4)

您可以使用此查询:

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

答案 2 :(得分:0)

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