您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

(已弃用)CREATE STATISTICS 语句(扩展存储表)[动态分层]

创建允许查询优化程序为查询计划做出更好决策的数据统计对象。

注意SAP HANA 动态分层已弃用。考虑迁移到 SAP HANA 本机存储扩展 (NSE)。

语法

CREATE STATISTICS [] ON   

[ ]

[ ]

[ ];

语法元素

指定数据统计对象的唯一名称。 ::= [ .]仅当创建结果为单个数据统计对象时,才允许 。通过 CREATE STATISTICS 创建的数据统计对象的数量由 中指定的列数的组合确定。 ::= 必须与为数据源 指定的相同。指定要为其创建数据统计对象的数据源。 ::= [ ( [, [,...] ] )对于 RECORD COUNT 数据统计对象,无法将列指定为 data_sources 的一部分。指定要创建统计的表名。 ::= [.]如果指定数据统计名称,则只能指定一个数据源。指定为其定义数据统计的列。 ::= 如果未指定 ,则会更改与指定属性匹配的表的所有统计信息,包括表范围的统计信息 (RECORD COUNT)。创建单列数据统计信息时指定多个列等同于分别为每个列执行匹配的 CREATE STATISTICS 语句。如果指定数据统计名称,则只能指定一个数据源。 指定要创建的数据统计对象的类型。  := TYPE ::= HISTOGRAM | SIMPLE | TOPK | SKETCH | SAMPLE | RECORD COUNT数据源只能具有一个特定类型的数据统计对象。例如,表 T 的列 A 可以具有一个类型为 HISTOGRAM 的数据统计对象和一个类型为 SIMPLE 的数据统计对象。如果未指定 TYPE 子句,则默认值为 HISTOGRAM。某些数据统计类型可能不适用于给定数据源。 HISTOGRAM创建数据统计对象,以帮助查询优化器估计单列数据源中的数据分布。如果在 中指定多个列,则会创建多个数据统计对象 (HISTOGRAM) - 每个指定的列一个。 简单创建一个数据统计对象,以帮助查询优化程序计算单列数据源的基本统计信息,例如 min、max、null count、count 和 distinct count。如果在 中指定多个列,则会创建多个数据统计对象,即为每个指定的列创建一个数据统计对象。 TOPK创建数据统计对象,以帮助查询优化器识别表数据源中的最高频率值。如果在 中指定多个列,则会创建多个数据统计对象,即为每个指定的列创建一个数据统计对象。 SKETCH创建数据统计对象,以帮助查询优化器估计数据源中的非重复值数量。为指定的 (,...) 创建数据统计对象,该对象近似于表投影中对指定列集合的不同元组的数量。 样本从 创建 SQL 优化器可在优化期间使用的数据示例。如果有利,SQL 优化器会在列和行存储表上自动生成系统 SAMPLE 数据统计对象。但是,此行为可能会产生性能成本。您可以通过显式(提前)创建 SAMPLE 数据统计对象来避免此成本。在抽样实时表数据消耗大量资源(例如,非常大的表)的情况下,显式创建表特别有用。 记录计数创建数据统计对象,以帮助查询优化器计算表数据源中的记录数(行)。RECORD COUNT 类型是表范围的统计信息。创建 RECORD COUNT 数据统计对象时,未在 中指定列。如果有利,SQL 优化器会自动在列和行存储表上维护系统 RECORD COUNT 数据统计对象。 指定数据统计对象的属性。  ::= [,[,...].] ::= | REFRESH TYPE | ENABLE | BUCKETS | {MEMORY | | MEMORY PERCENT } | CONSTRAINT 属性描述中注意哪些属性适用于哪些统计类型的限制。 刷新类型 <刷新类型>指定数据统计对象的策略。 ::= { AUTO | MANUAL | DEFAULT }AUTO 指定在基础数据更改时自动刷新数据统计对象。仅列存储、扩展存储表和多存储表支持 AUTO。MANUAL 指定在通过 REFRESH STATISTICS 语句显式请求重建之前,不会刷新数据库统计对象。DEFAULT 指定数据库服务器根据数据源确定最佳刷新策略。例如,对于列存储数据源上的数据统计对象,数据库服务器缺省应用 AUTO。REFRESH TYPE 仅影响已启用的数据统计对象。 启用 控制优化器是否使用数据统计对象。  ::= { ON | OFF }ENABLE ON 使优化器能够查看数据统计对象。必须使用数据填充数据统计对象,以便优化器使用。使用 NO INITIAL REFRESH 指定的 ENABLE ON 将返回错误。ENABLE ON 是缺省行为。ENABLE OFF 禁用优化器使用数据统计对象,并阻止刷新数据统计对象的功能。未启用的数据统计对象仍可以删除。要使优化器可以访问 ENABLE OFF 的数据统计对象,请执行 ALTER STATISTICS...ENABLE ON 语句。 BUCKETS BUCKETS 属性仅与 TYPE HISTOGRAM 或 TOPK 一起使用。对于 HISTOGRAM,BUCKETS 指定 HISTOGRAM 中数据桶的最大数量。对于 TOPK,BUCKETS 指定 K 值。缺省值由使用中的数据统计构建算法自动确定。如果为 QOPTIMAL HISTOGRAM 指定了非常少数量的存储桶,则在首次构建期间或对 HISTOGRAM 执行的后续刷新期间,算法可能无法构建有效的 HISTOGRAM。仅对于列存储、扩展存储和多存储表,如果为 QOPTIMAL HISTOGRAM 指定了非常少数量的存储桶,则在首次构建期间或为 HISTOGRAM 执行后续刷新期间,算法可能无法构建有效的 HISTOGRAM。 MEMORY 指定用于 QOPTIMAL HISTOGRAMS 的最大内存量(以字节为单位)。 ::= MEMORY 参数限制 QOPTIMAL HISTOGRAMS 的内存。MEMORY 仅适用于 QOPTIMAL HISTOGRAM 算法。MEMORY 值较小可能会导致 QOPTIMAL HISTOGRAM 算法选取少量存储桶,这可能会导致构建或刷新 HISTOGRAM 失败。 MEMORY PERCENT 指定用于数据统计对象的最大内存量,以数据源使用的空间的百分比表示。 ::= HISTOGRAMS 可以为某些数据源使用大量内存。 表示可用于数据统计对象的最大内存量。例如,如果数据源是使用 100 MB 内存的表列,而 为 5,则此列的数据统计对象最多可以使用 5 MB 用于其内存表示。缺省值由正在使用的 HISTOGRAM 算法自动确定。MEMORY PERCENT 的值较小可能会导致 QOPTIMAL HISTOGRAM 算法选取少量存储桶,这可能会导致构建或刷新 HISTOGRAM 失败。 CONSTRAINT指定用于为类型 HISTOGRAM 指定的 的约束。CONSTRAINT ::= MAXDIFF直方图大小限制(BUCKETS、MEMORY 和 MEMORY PERCENT)按 HISTOGRAM 应用。HISTOGRAM 的非缺省 CONSTRAINT 返回错误。指定创建后是否使用数据填充数据统计对象。 ::= [ NO ] INITIAL REFRESH 初始刷新创建数据统计对象的定义并使用数据对其进行填充。缺省行为是 INITIAL REFRESH。 无初始刷新创建数据统计对象的定义,但不填充数据。如果要在刷新数据统计对象之前更改基础数据,请使用 NO INITIAL REFRESH。如果未指定 ENABLE OFF,则无法指定 NO INITIAL REFRESH。

许可

关于所需权限,以下其中一项为真:

  • 拥有要创建统计的表。

  • 具有对要创建统计的对象的 ALTER 权限。

    描述

    CREATE STATISTICS 语句创建近似于指定 的数据统计对象。数据统计对象用于估算数据的属性,而无需直接访问数据本身。这在查询优化、查询执行等过程中非常有用。

    示例

    在列 T(X) 上创建最多包含 1000 个存储桶的 MAXDIFF HISTOGRAM,其中 T 是扩展存储表:

    CREATE STATISTICS ON MYSYSTEM.T(X) TYPE HISTOGRAM BUCKETS 1000

    在列 T(X) 上创建 MAXDIFF HISTOGRAM,其中 T 是扩展存储表。未指定的 BUCKETS 值由 HISTOGRAM 构建算法确定。将此数据的名称指定为 "HISTOGRAM_T_X":

    CREATE STATISTICS "HISTOGRAM_T_X" ON MYSYSTEM.T(X) TYPE HISTOGRAM

    在 T(A, B) 上创建 SKETCH:

    CREATE STATISTICS ON MYSYSTEM.T(A,B) TYPE SKETCH;