📜  Teradata统计

📅  最后修改于: 2021-01-11 11:31:24             🧑  作者: Mango

Teradata统计

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

COLLECT STATISTICS(优化程序形式)语句收集基本表,哈希索引或联接索引的一列或多列的人口统计数据,计算收集到的数据的统计资料,并将提要存储在数据字典中。

当优化器生成表访问并加入计划时,它会使用摘要数据。

环境信息

Teradata Statistics环境需要以下条件:

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

资料客层

数据受众特征考虑以下因素:

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

用法

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

在填充表进行原型制作之后,我们可以轻松地再次收集统计信息,并在生产时将其返回。

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

  • 唯一索引,可以是:
    • 小学或中学
    • 单列或多列
    • 分区或非分区
  • 非唯一索引,可以是:
    • 小学或中学
    • 单列或多列
    • 分区或未分区
    • 有或没有COMPRESS字段
  • 非索引列或一组列,可以是:
    • 分区或非分区
    • 有或没有COMPRESS字段
  • 临时表
    • 如果我们指定TEMPORARY关键字,但是物化表不存在,则系统首先根据指定的列名和索引来物化实例。这意味着在创建有效实例之后,我们可以通过输入COLLECT STATISTICS和TEMPORARY关键字来重新收集有关列的统计信息,而不必指定所需的列和索引。
    • 如果我们省略TEMPORARY关键字,但该表是临时表,则将为空的基表(而非实例化实例)收集统计信息。
  • 数据表或索引行的样本(系统选择的百分比),以检测数据偏斜并在发现样本时动态增加样本大小。
    • 系统不会同时存储同一索引或列集的抽样统计信息和已定义统计信息。收集了抽样统计信息后,隐式回忆将命中相同的列和索引,并以相同的模式运行。
  • 加盟指数
  • 哈希指数
  • NoPI表

如何处理收集统计信息

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

  • 随机AMP采样
  • 完整的统计数据收集
  • 使用SAMPLE选项

收集表统计

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

句法

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

COLLECT [SUMMARY] STATISTICS   
INDEX (indexname) COLUMN (columnname) 
ON ;

考虑具有以下记录的Employee表,例如:

Emp_Id First_Name Last_Name Department_No
202001 Mike Richard 1
202002 Robert Williams 2
202003 Peter Collin 2
202004 Alexa Stuart 1
202005 Robert Peterson 1

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

COLLECT STATISTICS COLUMN(Emp_Id, First_Name) ON Employee;

          /* Total elapsed time was 0.00 second */

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

Update completed. 2 rows changed.

查看统计

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

句法

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

HELP STATISTICS ;

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

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