一、存储临时数据表类型
Teradata支持以下表类型来保存临时数据。
Derived Table 派生表,在查询中创建,使用和删除。 这些用于在查询中存储中间结果。
Volatile Table 异失性表,在用户会话中创建,使用和删除Volatile Table。 它们的定义不存储在数据字典中。 它们保存经常使用的查询的中间数据。
Global Temporary Table 全局临时表,定义存储在数据字典中,并且它们可以被许多用户/会话使用。 但是加载到Global Temporary Table中的数据仅在会话期间保留。 每个会话最多可以实现2000个Global Temporary Table
二、空间概念
Permanent Space 永久的空间
Permanent Space是用户/数据库保存数据行的最大可用空间量。 永久表,日志,回退表和辅助索引子表使用Permanent Space。
不为数据库/用户预分配Permanent Space。 它们只是定义为数据库/用户可以使用的最大空间量。Permanent Space的量除以AMP的数量。 每当每个AMP限制超过,将生成一条错误消息。
Spool Space 线轴的空间
Spool Space是未使用的永久空间,由系统用于保留SQL查询的中间结果。 没有Spool Space的用户无法执行任何查询。
与Permanent Space类似,Spool Space定义了用户可以使用的最大空间量。Spool Space除以AMP的数量。 每当每个AMP限制超过,用户将得到Spool Space错误。
Temp Space 临时空间
Temp Space是未使用的永久空间,由Global Temporary tables使用。 Temp space也除以AMP的数量。
三、Teradata 二级索引
表只能包含一个主索引。
辅助索引是用于访问数据的备用路径。主索引和辅助索引之间存在一些差异。
-次级索引不涉及数据分发。
-辅助索引值存储在子表中。这些表是在所有AMP中内置的。
-辅助索引是可选的。
-它们可以在创建表期间或在创建表之后创建。
-它们占用额外的空间,因为它们构建子表,并且它们还需要维护,因为需要为每个新行更新子表。
分唯一和非唯一 二级索引:
CREATE UNIQUE INDEX(xxx) on employee;
CREATE INDEX(xxx) on employee;
四、统计
Teradata优化器提出了每个SQL查询的执行策略。 此执行策略基于在SQL查询中使用的表收集的统计信息。
使用COLLECT STATISTICS命令收集表上的统计信息。
优化器需要环境信息和数据人口统计数据来制定最佳执行策略。
1.环境信息
节点数,AMP和CPU数
内存量
2.数据人口统计数据
行数
行大小
表中的值范围
每个值的行数
空数
有三种方法来收集表上的统计信息。
*随机AMP采样
*全面统计收集
*使用SAMPLE选项
*收集统计
COLLECT STATISTICS命令用于收集表上的统计信息。
COLLECT [SUMMARY] STATISTICS
INDEX (indexname) COLUMN (columnname)
ON <tablename>;
- 1
- 2
- 3
以下示例收集Employee表的EmployeeNo列的统计信息。
COLLECT STATISTICS COLUMN(EmployeeNo) ON Employee;
- 1
此时可以使用HELP STATISTICS命令查看收集的统计信息
HELP STATISTICS employee;
Date Time Unique Values Column Names
-------- -------- -------------------- -----------------------
16/01/01 08:07:04 5 EmployeeNo
- 1
- 2
- 3
- 4
- 5
五、压缩
压缩用于减少表所使用的存储。
在Teradata中,压缩最多可以压缩255个不同的值,包括NULL。
由于存储已减少,Teradata可以在块中存储更多记录。 这导致改进的查询响应时间,因为任何I / O操作可以每块处理更多行。 可以在使用CREATE TABLE创建表或使用ALTER TABLE命令创建表之后添加压缩。
限制:每列只能压缩255个值;主索引列不能压缩;不能压缩易失性表。
对列应用压缩时,此列的值不与该行一起存储。 相反,值存储在每个AMP中的表头中,只有存在位被添加到该行以指示该值。
多值压缩(MVC)
示例:压缩值为1,2和3的字段DepatmentNo
CREATE SET TABLE employee (
。。。
DepartmentNo CHAR(2) COMPRESS(1,2,3)
)
UNIQUE PRIMARY INDEX(EmployeeNo);
- 1
- 2
- 3
- 4
- 5
当在具有有限值的大表中具有列时,可以使用多值压缩。
六、说明
EXPLAIN命令以英语返回解析引擎的执行计划。
当查询前面有EXPLAIN命令时,解析引擎的执行计划将返回给用户,而不是AMP。
1.全表扫描(FTS)
当在SELECT语句中没有指定条件时,优化器可以选择在访问表的每一行时使用全表扫描。
示例:
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.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
2.唯一主索引
当使用唯一主索引访问行时,则它是一个AMP操作。
EXPLAIN SELECT * FROM employee WHERE EmployeeNo = 101;
- 1
当执行上述查询时,它将产生以下输出。 可以看出,它是单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.
- 1
- 2
- 3
- 4
- 5
- 6
3.唯一二级索引
当使用唯一二级索引访问行时,它是一个双放大操作。
有如下表:
CREATE SET TABLE SALARY,FALLBACK (
EmployeeNo INTEGER,
Gross INTEGER,
Deduction INTEGER,
NetPay INTEGER
)
PRIMARY INDEX ( EmployeeNo ) --注意
UNIQUE INDEX (EmployeeNo); --注意
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
考虑以下select语句:
EXPLAIN SELECT * FROM Salary WHERE EmployeeNo = 101;
- 1
当执行上述查询时,它将产生以下输出。 可以看出,优化器在使用唯一二级索引的两个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.
- 1
- 2
- 3
- 4
- 5
- 6
以下是EXPLAIN计划中常见的术语列表:
… (Last Use) …
不再需要假脱机文件,并且将在此步骤完成后释放。
… with no residual conditions …
所有适用的条件已应用于行。
… END TRANSACTION …
将释放事务锁,并提交更改。
… eliminating duplicate rows …
重复行仅存在于假脱机文件中,而不是设置表。执行DISTINCT操作。
… eliminating duplicate rows …
重复行仅存在于假脱机文件中,而不是设置表。执行DISTINCT操作。
… we do a SMS (set manipulation step) …
使用UNION,MINUS或INTERSECT运算符组合行。
… which is redistributed by hash code to all AMPs.
重新分配数据以准备加入。
… which is duplicated on all AMPs.
在准备加入时,从较小的表(根据SPOOL)复制数据。
… (one_AMP) or (group_AMPs)
表示将使用一个AMP或AMP子集而不是所有AMP。




