-
- UPDATE STATISTICS 语句
使用 UPDATE STATISTICS 语句来更新系统目录信息,查询优化器用于对本地数据库中对象上的操作。UPDATE STATISTICS 语句是对 SQL 的 ANSI/ISO 标准的扩展。
语法
表和列作用域
元素 | 描述 | 限制 | 语法 |
column | 表或同义词中的列 | 必须存在。带有 MEDIUM 或 HIGH 关键字,该列不可为 BYTE、LVARCHAR 或 TEXT 数据类型。 | 标识符 |
owner | 表或同义词的所有者 | 必须是表或同义词的所有者 | 所有者名称 |
synonym | 要更新其统计信息的表的同义词 | 在当前的数据库中,该同义词以及它指向的表必须存在 | 标识符 |
table | 要为其更新统计信息的表 | 必须在当前的数据库中存在,或为在当前会话中创建的临时表 | 标识符 |
用法
使用 UPDATE STATISTICS 语句来执行任何下列任务:
- 为表和表分片计算列值的分发。
- 更新数据库服务器用来优化查询的系统目录表。
- 强制重新优化 SPL 例程。
- 当您升级数据库服务器时,转换现有的索引。
请在不包含任何其他语句的事务中运行 UPDATE STATISTICS 语句。
如果您未指定表、例程以及 Resolution 子句,则 UPDATE STATISTICS 语句的缺省作用域是当前数据库中所有永久表。(另请参阅主题 UPDATE STATISTICS 的作用域。)
在高可用性集群中的辅助服务器上,不支持 UPDATE STATISTICS 语句。
限制: 在除了当前数据库之外的任何数据库中,您都不可更新表的或 UDR 的查询计划的统计信息。也就是说,当执行 UPDATE STATISTICS 语句时,数据库服务器忽略数据库对象。
UPDATE STATISTICS 的作用域
跟在 FOR TABLE 关键字或 FOR PROCEDURE 关键字之后的任何表、列或 SPL 例程都限制 UPDATE STATISTICS 的作用域。
- 如果 UPDATE STATISTICS 语句
- 未包括 Table 和 Column Scope 子句,且
- 无 Resolution 子句,且
- 无 FOR FUNCTION 规范,且
- 无 FOR PROCEDURE 规范,且
- 无 FOR ROUTINE 规范,且
- 无 FOR SPECIFIC 规范,
则在缺省情况下,对于当前数据库中的每个永久表,在 LOW 模式下更新列分发统计信息,包括系统目录表。
- 如果您使用 FOR TABLE 关键字,但未指定表的名称或同义词,则数据库服务器重新计算当前数据中所有表上的分发,以及您的会话中所有临时表上的分发。(然而,UPDATE STATISTICS 对通过 CREATE EXTERNAL TABLE 语句定义的对象不起作用。)
- 如果您在 FOR TABLE 关键字之后指定表,但没有指定列的列表,则数据库服务器重新计算指定的表的所有列上的统计分发。
- 如果您包括 FOR PROCEDURE 关键字,但未指定任何 SPL 例程的名称,则数据库服务器重新优化当前数据库中所有 SPL 例程的查询执行计划。
更新表的统计信息
虽然对数据库的更改可能使得 systables、syscolumns、sysindices、sysfragments、sysdistrib 和 sysfragdist 系统目录表中的信息过时,但在大多数 SQL 语句之后,数据库服务器不自动地更新那些表。
在下列情况下,发出恰当的 UPDATE STATISTICS 语句来确保系统目录表中的列分发信息反映数据库的当前状态:
- 您对表执行扩展的修改。
- 应用更改列值的分发。
UPDATE STATISTICS 语句刷新数据库服务器用于优化修改了的对象上的查询的数据分发统计信息。
- 您以较新的数据库服务器为用户升级数据库。
UPDATE STATISTICS 语句将旧的索引转换为符合较新的数据库服务器索引格式,并隐式地删除旧的索引。
您可逐个表地转换索引,也可一次转换整个数据库的索引。请遵循 GBase 8s 迁移指南 中的转换指南。
如果您的引用导致特定的表中数据的许多修改,则以 UPDATE STATISTICS 常规地为那个表更新系统目录来提升查询效率。术语许多修改是相对于分发的分解。如果数据修改对列值的分发几乎没有影响,则您不需要执行 UPDATE STATISTICS。
NLSCASE INSENSITIVE 数据库中的分发统计信息
在以 NLSCASE INSENSITIVE 属性创建的数据库中,在列和 NCHAR 或 NVARCHAR 数据类型的表达式上的数据库服务器操作,在大写字母与小写字母之间没有区别。在包括相同的字母序列但大小写不同的字符串的数据集中,与包含相同的记录的区分大小写的数据库相比,生成 NCHAR 和 NVARCHAR 列的数据分发需要较少的 bin。数据库服务器仅将所有大小写不同的值标识为单个的不同值,并当它生成该列、索引或分片级统计信息时使用此结果。
要获取更多关于 NLSCASE INSENSITIVE 数据库的信息,请参阅 在 NLSCASE INSENSITIVE 数据库中重复的行、指定 NLSCASE 区分大小写 和 在区分大小写的数据库中的 NCHAR 和 NVARCHAR 表达式。