SQL Server数据库统计信息-索引中的行数小于表的行数

时间:2019-04-26 18:00:03

标签: sql-server

当我运行以下查询时:

SELECT 
    object_name(ss.object_id) object_name, 
    ss.name, last_updated, rows, rows_sampled,
    round (100 * (CAST(rows_sampled as float) / CAST(rows as float)), 2) sample_percent,
    steps, unfiltered_rows, ss.filter_definition, modification_counter, is_disabled
FROM 
    sys.stats AS ss
JOIN 
    sysobjects so on so.id = ss.object_id
JOIN 
    sys.indexes si on si.name = ss.name
CROSS APPLY 
    sys.dm_db_stats_properties(ss.object_id, ss.stats_id) AS sp
WHERE 
    so.xtype != 'S'
    AND sp.rows <> sp.rows_sampled
    AND ss.name not like '_WA%'
ORDER BY 
    object_name(ss.object_id), ss.name;

我从同一张表中看到索引,它们的行值不同。

索引中的行数是否与其基础表完全相同?

1 个答案:

答案 0 :(得分:3)

您没有将表行与索引行进行比较。您正在将总行与用于创建索引统计信息的样本行进行比较。

来自Microsoft Docs

  
      
  • 上次更新统计信息时表或索引视图中的总行数。如果统计信息被过滤或与过滤索引相对应,则行数可能少于表中的行数。

  •   
  • rows_sampled 用于统计计算的采样总行数。

  •