Teradata 统计

2025年3月17日 | 阅读 3 分钟

Teradata 优化器为每个 SQL 查询提供一个执行策略。此执行策略基于在 SQL 查询中使用的表上收集的统计信息。使用 COLLECT STATISTICS 命令收集表上的统计信息。

COLLECT STATISTICS(优化器形式)语句收集一个或多个基表、哈希索引或连接索引列的人口统计数据,计算收集数据的统计概况,并将概要存储在数据字典中。

优化器在生成其表访问和连接计划时使用概要数据。

环境信息

Teradata 统计信息环境需要以下内容

  • 节点、AMP 和 CPU 的数量
  • 内存量

数据人口统计

数据人口统计考虑以下内容

  • 行数
  • 行大小
  • 表中的值范围
  • 每个值的行数
  • 空值的数量

用途

我们应该在新创建的空数据表上收集统计信息。空集合定义加载组的列、索引和概要数据结构。

在填充表以进行原型设计后,以及在投入生产时,我们可以轻松地再次收集统计信息。

我们可以通过以下方式收集统计信息。

  1. 唯一索引,可以是
    • 主索引或辅助索引
    • 单列或多列
    • 分区或非分区
  2. 非唯一索引,可以是
    • 主索引或辅助索引
    • 单列或多列
    • 分区或非分区
    • 带有或不带有 COMPRESS 字段
  3. 非索引列或列集,可以是
    • 分区或非分区
    • 带有或不带有 COMPRESS 字段
  4. 临时表
    • 如果我们指定 TEMPORARY 关键字,但具体化的表不存在,系统首先基于指定的列名和索引具体化一个实例。
      这意味着在创建有效的实例后,我们可以通过输入 COLLECT STATISTICS 和 TEMPORARY 关键字来重新收集列的统计信息,而无需指定所需的列和索引。
    • 如果我们省略 TEMPORARY 关键字,但表是临时的,则为创建一个空的基表(而不是具体化的实例)收集统计信息。
  5. 数据表或索引的行的样本(系统选择的百分比),用于检测数据倾斜并在找到时动态增加样本大小。
    • 系统不存储同一索引或列集的采样统计信息和定义的统计信息。一旦收集了采样统计信息,隐式重新收集就会命中相同的列和索引,并以相同的模式运行。
  6. 连接索引
  7. 哈希索引
  8. NoPI 表

如何处理收集统计信息

有三种方法可以收集表上的统计信息。

  • 随机 AMP 采样
  • 完整统计信息收集
  • 使用 SAMPLE 选项

收集表的统计信息

COLLECT STATISTICS 命令用于收集表上的统计信息。

语法

以下是收集表统计信息的基本语法。

示例

考虑一个包含以下记录的 Employee 表,例如

员工 ID名字姓氏部门编号
202001迈克Richard1
202002Robert威廉姆斯2
202003彼得科林2
202004Alexa斯图尔特1
202005Robert彼得森1

我们将运行以下查询来收集 Employee 表的 Emp_Id、First_Name 列的统计信息。

执行上述查询后,它将产生以下输出。

Update completed. 2 rows changed.

查看统计信息

我们可以使用 HELP STATISTICS 命令查看收集的统计信息。

语法

以下是查看收集的统计信息的语法。

示例

以下是查看在 Employee 表上收集的统计信息的示例。

执行上述查询后,它会生成以下具有更新的列及其值的表。

Date        Time        Unique Values    Column Names
6/2/20     10:05:02      5                  *
6/2/20     10:05:02      5                  Emp_Id, First_Name

下一主题Teradata 压缩