sys.stats (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库

为 SQL Server 数据库中的表、索引和索引视图对应的每个统计信息对象都包含一行。 每个索引都具有一个拥有相同名称和 ID (index_id = stats_id) 的对应统计信息行,但是并非每个统计信息行都有对应的索引。

目录视图 sys.stats_columns 为数据库中的每一列提供统计信息。

有关统计信息的详细信息,请参阅统计信息

注意

有关 Microsoft Fabric 中的统计信息的详细信息,请参阅 Microsoft Fabric 中的统计信息

列名称 数据类型 说明
object_id int 这些统计信息所属对象的 ID。
name sysname 统计信息的名称。 在对象中是唯一的。
stats_id int 统计信息 ID。 在对象中是唯一的。

如果统计信息对应于索引,则 stats_id 值与 sys.indexes 目录视图中的 index_id 值相同。
auto_created bit 指示统计信息是否由 SQL Server 自动创建。

0 = 统计信息不由 SQL Server 自动创建。

1 = 统计信息由 SQL Server 自动创建。
user_created bit 指示统计信息是否由用户创建。

0 = 统计信息不是用户创建的。

1 = 统计信息是用户创建的。
no_recompute bit 指示统计信息是否通过 NORECOMPUTE 选项创建。

0 = 统计信息不是通过 NORECOMPUTE 选项创建的。

1 = 统计信息通过 NORECOMPUTE 选项创建。
has_filter bit 0 = 统计信息不具有筛选器并且针对所有行进行计算。

1 = 统计信息具有筛选器并且仅针对满足筛选器定义的行进行计算。
filter_definition nvarchar(max) 包含在筛选统计信息中的行子集的表达式。

NULL = 非筛选的统计信息。
is_temporary bit 指示统计信息是否是临时的。 临时统计信息支持 AlwaysOn 可用性组辅助数据库(支持只读访问)。

0 = 统计信息不是临时的。

1 = 统计信息是临时的。

适用对象:SQL Server(从 SQL Server 2012 (11.x) 开始)
is_incremental bit 指示统计信息是否作为增量统计信息创建。

0 = 统计信息不是增量统计信息。

1 = 统计信息是增量统计信息。

适用对象:SQL Server(从 SQL Server 2014 (12.x) 开始)
has_persisted_sample bit 指示统计信息是否通过 PERSIST_SAMPLE_PERCENT 选项创建或更新。

0 = 统计信息不保留样本百分比。

1 = 统计信息通过 PERSIST_SAMPLE_PERCENT 选项创建或更新。

适用对象:SQL Server(从 SQL Server 2019 (15.x) 开始)
stats_generation_method int 指示用于创建统计信息的方法。

0 = 基于排序的统计信息

1 = 仅供内部使用

适用对象:SQL Server(从 SQL Server 2019 (15.x) 开始)
stats_generation_method_desc varchar(255) 创建统计信息所依据的方法的文本说明。

基于排序的统计信息

仅限内部使用

适用对象:SQL Server(从 SQL Server 2019 (15.x) 开始)
auto_drop bit 指示是否为此统计信息对象启用自动删除功能。 AUTO_DROP 属性允许在这样一种模式下创建统计信息对象:后续架构更改不会被统计信息对象阻止,而是在必要时删除统计信息。 这样,启用了 AUTO_DROP 的手动创建统计信息行为类似于自动创建统计信息行为。 有关详细信息,请参阅 AUTO_DROP 选项

适用于:Azure SQL 数据库、Azure SQL 托管实例,以及 SQL Server 2022 (16.x) 及更高版本。

权限

目录视图中元数据的可见性仅限于用户拥有的安全对象,或者向用户授予了某些权限的安全对象。 有关详细信息,请参阅 Metadata Visibility Configuration

示例

下面的示例返回 HumanResources.Employee 表的所有统计信息和统计信息列。

USE AdventureWorks2022;
GO
SELECT s.name AS statistics_name
      ,c.name AS column_name
      ,sc.stats_column_id
FROM sys.stats AS s
INNER JOIN sys.stats_columns AS sc
    ON s.object_id = sc.object_id AND s.stats_id = sc.stats_id
INNER JOIN sys.columns AS c
    ON sc.object_id = c.object_id AND c.column_id = sc.column_id
WHERE s.object_id = OBJECT_ID('HumanResources.Employee');

另请参阅

后续步骤