Teradata SQL 语句优化通用方法–索引
建立合理的索引,索引的设计要建立在对各种查询的分析和预测上,遵循以下原则: – 有大量重复值,且经常有范围查询,例如:(between , > , < , >= , <= ) 和order by ,group by 发生的列,可考虑建立群集索引. – 经常同时存取多列,且每列都含有重复值可考虑建立组合索引. – 组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列. 有索引的尽量用索引,用到索引的条件写在前面.
建立合理的索引,索引的设计要建立在对各种查询的分析和预测上,遵循以下原则: – 有大量重复值,且经常有范围查询,例如:(between , > , < , >= , <= ) 和order by ,group by 发生的列,可考虑建立群集索引. – 经常同时存取多列,且每列都含有重复值可考虑建立组合索引. – 组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列. 有索引的尽量用索引,用到索引的条件写在前面.
在内连接中加入条件,无论是加到 join 子句,还是加到 where 子句,其效果完全一样. 外连接情况就不同了: 当把条件加入到 join 子句时,数据库会返回外连接表的全部行,然后使用指定的条件返回第二个表的行. 当把条件放到 where 子句时,数据库先进行连接操作,然后使用 where 子句对连接后的新表进行数据筛选. (此处有待验证,印象中,teradata 会先进行 where 条件的限定,再做连接)
CROSS JOIN : 不使用任何匹配或者选取条件,而是直接交一个数据源中的每个行与另一个数据源中的每个行都一一匹配,结果集是笛卡尔乘积.大多数交叉连接都是由于错误操作而造成的,但是它在造测试数据时非常有用. select * from table1 as t1 cross join table2 as t2 等同于 select * from table1 as t1, table2 as t2
根据各种 SQL 语句的功能不同,可以将其分成以下三大类: (1) 数据定义语言 (DDL) :用来在系统中创建或修改各种对象的结构,也可以用来删除系统中已有的对象,其命令集中主要包括: – CREATE : 创建一个新的数据库,用户,数据库对象或索引 – 删除一个已存在的数据库,用户,数据库对象或索引 – 修改一个表结构和保护定义,启动或禁止触发器 (2) 数据操作语言 (DML) :用来存取对象中的信息. 因此, DML 是 SQL 中使用最频繁的语言.其命令集中主要包括: – SELECT : 执行关系查询 – INSERT : 在表中增加新行 – UPDATE : 修改表中已存在行的值……
继续阅读»»»
Teradata 通过 HASH 算法,通过 AMP 将数据随机或均匀的分布到存储设备上 每个 AMP 负责表的记录行的一个子集 负载的均匀分布取决于数据的均匀分布 数据分布通过 PI (PRIMARY INDEX) 来实现: 每张表都必须有一个PI 如果建表时未指定 PI ,系统将使用表中第一个不能为空的字段做为 PI PI 字段不能修改 PI 可以是一个字段或多个字段
Perm Space – 数据库中用来存储真正数据的空间,也称为永久空间 – 只是逻辑的概念,表示数据库可使用的存储空间的上限,不预先分配 – 可以动态修改 Spool Space – 用于存储处理交易请求的中间结果,交易结果,空间释放 – 也是逻辑概念,表示数据库可使用的 SPool 空间不能超过此上限 – 整个系统的剩余空间,都可以用作 SPool Temp Space – 用于存储临时表, Session 结束,空间释放 – 也是逻辑的概念,表示数据库可使用的 temp 空间不能超过些上限 – 整个系统的剩余空间都可以用作 temp
在 Teradata MPP 系统中,各个节点间 (确切的说是各个 AMP 之间) 的内部高速互联是通过 BYNET 实现的,它就是 Teradata 系统中那些松散耦合的节点之间相互联系的通讯总结,但实际上,它却远远没有这么简单. BYNET 是一组硬件和运行在这组硬件上的处理通迅任务的软件进程的组合体,用于: 节点之间的双向广播 (bidirectional broadcast) 多路传递 (nulticast) 点对点通信 (poing to point communication) 实现 SQL 查询过程的合并功能