- Teradata 教程
- Teradata - 主页
- Teradata 基础知识
- Teradata - 简介
- Teradata - 安装
- Teradata - 架构
- Teradata - 关系概念
- Teradata - 数据类型
- Teradata - 表
- Teradata - 数据操作
- Teradata - SELECT 语句
- 逻辑和条件运算符
- Teradata - SET 运算符
- Teradata - 字符串操作
- Teradata - 日期/时间函数
- Teradata - 内置函数
- Teradata - 聚合函数
- Teradata - 案例与合并
- Teradata - 主索引
- Teradata - 加入
- Teradata - 子查询
- Teradata 高级版
- Teradata - 表类型
- Teradata - 空间概念
- Teradata - 二级索引
- Teradata - 统计
- Teradata - 压缩
- Teradata - 解释
- Teradata - 哈希算法
- Teradata - 连接索引
- Teradata - 视图
- Teradata - 宏
- Teradata - 存储过程
- Teradata - 加入策略
- Teradata - 分区主索引
- Teradata - OLAP 函数
- Teradata - 数据保护
- Teradata - 用户管理
- Teradata - 性能调优
- Teradata - 快速加载
- Teradata - 多负载
- Teradata - 快速导出
- Teradata-BTEQ
- Teradata 有用资源
- Teradata - 问题与解答
- Teradata - 快速指南
- Teradata - 有用的资源
- Teradata - 讨论
Teradata - 解释
EXPLAIN命令以英文返回解析引擎的执行计划。它可以与任何 SQL 语句一起使用,但另一个 EXPLAIN 命令除外。当查询前面带有 EXPLAIN 命令时,解析引擎的执行计划将而不是 AMP 返回给用户。
解释的例子
考虑具有以下定义的 Employee 表。
CREATE SET TABLE EMPLOYEE,FALLBACK ( EmployeeNo INTEGER, FirstName VARCHAR(30), LastName VARCHAR(30), DOB DATE FORMAT 'YYYY-MM-DD', JoinedDate DATE FORMAT 'YYYY-MM-DD', DepartmentNo BYTEINT ) UNIQUE PRIMARY INDEX ( EmployeeNo );
下面给出了 EXPLAIN 计划的一些示例。
全表扫描 (FTS)
当 SELECT 语句中未指定条件时,优化器可能会选择使用全表扫描来访问表的每一行。
例子
以下是优化器可以选择 FTS 的示例查询。
EXPLAIN SELECT * FROM employee;
执行上述查询时,会产生以下输出。可以看出,优化器选择访问所有 AMP 以及 AMP 中的所有行。
1) First, we lock a distinct TDUSER."pseudo table" for read on a RowHash to prevent global deadlock for TDUSER.employee. 2) Next, we lock TDUSER.employee for read. 3) We do an all-AMPs RETRIEVE step from TDUSER.employee by way of an all-rows scan with no residual conditions into Spool 1 (group_amps), which is built locally on the AMPs. The size of Spool 1 is estimated with low confidence to be 2 rows (116 bytes). The estimated time for this step is 0.03 seconds. 4) Finally, we send out an END TRANSACTION step to all AMPs involved in processing the request. → The contents of Spool 1 are sent back to the user as the result of statement 1. The total estimated time is 0.03 seconds.
唯一主索引
当使用唯一主索引访问行时,这是一个 AMP 操作。
EXPLAIN SELECT * FROM employee WHERE EmployeeNo = 101;
执行上述查询时,会产生以下输出。可以看出,这是一个单 AMP 检索,优化器使用唯一主索引来访问该行。
1) First, we do a single-AMP RETRIEVE step from TDUSER.employee by way of the unique primary index "TDUSER.employee.EmployeeNo = 101" with no residual conditions. The estimated time for this step is 0.01 seconds. → The row is sent directly back to the user as the result of statement 1. The total estimated time is 0.01 seconds.
唯一二级索引
当使用唯一二级索引访问行时,这是一个双放大器操作。
例子
考虑具有以下定义的 Salary 表。
CREATE SET TABLE SALARY,FALLBACK ( EmployeeNo INTEGER, Gross INTEGER, Deduction INTEGER, NetPay INTEGER ) PRIMARY INDEX ( EmployeeNo ) UNIQUE INDEX (EmployeeNo);
考虑以下 SELECT 语句。
EXPLAIN SELECT * FROM Salary WHERE EmployeeNo = 101;
执行上述查询时,会产生以下输出。可以看出,优化器使用唯一的二级索引在两个 amp 操作中检索行。
1) First, we do a two-AMP RETRIEVE step from TDUSER.Salary by way of unique index # 4 "TDUSER.Salary.EmployeeNo = 101" with no residual conditions. The estimated time for this step is 0.01 seconds. → The row is sent directly back to the user as the result of statement 1. The total estimated time is 0.01 seconds.
附加条款
以下是 EXPLAIN 计划中常见的术语列表。
...(最后一次使用)...
不再需要假脱机文件,此步骤完成后将被释放。
...没有残留条件...
所有适用的条件均已应用于行。
...结束交易...
事务锁被释放,更改被提交。
...消除重复行...
重复行仅存在于假脱机文件中,而不存在于设置表中。进行 DISTINCT 操作。
...通过遍历索引 #n 仅提取行 ID ...
构建一个假脱机文件,其中包含在二级索引(索引 #n)中找到的行 ID
...我们发送短信(设置操作步骤)...
使用 UNION、MINUS 或 INTERSECT 运算符组合行。
...通过哈希码重新分配给所有 AMP。
重新分配数据以准备连接。
...在所有 AMP 上都会重复。
从较小的表(就 SPOOL 而言)复制数据以准备联接。
... (one_AMP) 或 (group_AMP)
指示将使用一个 AMP 或 AMP 子集而不是所有 AMP。