Teradata


4
三 11

Teradata SQL 优化举例–where 的二个原则

    
       第一个原则:在 where 子句中应该把最具限制性的条件放在最前面.
       - 在下面的两条 select 语句中:

select * from table 1 where col1 <= 10000 and col1 >=0;
select * from table 1 where col1 >=0 and col1 <= 10000;

       -如果数据表中的数据 col1 都>=0 ,则第一条语句要比第二条select 语句效率高的多,因为第二条语句的第一个条件耗费了大量的系统资源.

       第二个原则: where 子句中字段顺序应和索引中字段顺序一致.


4
三 11

TERADATA SQL 语句优化通用方法–合理使用命令提高效率

       
       最近几篇关于 Teradata 的日志,来源于互联网,在阅读的过程中,感觉有些说法和我的认识存在一些差距,我会标红表示疑问,哪位有不同的见解,欢迎留下脚印:

  • 注意 union 和 union all 的区别, union all 效率更高
  • 在没有必要时不要使用 distinct 和 order by , 它同 union 一样会使查询变慢
  • between 在某些时候比 in 速度更快, between 能更快的根据索引找到范围
  • 用 or  的子句可以分解成多个查询,并且通过 union 连接多个查询.他们的速度中同是否使用索引有关.  (这样可以提高效率吗?)
  • 在 in 后面值的列表中,将出现最频繁的值放在最前面,出现的最少的放在最后面,判断次数. (这个会有影响吗?)
  • 合理的使用外连接,外连接比内连接效率更高(这个有实际应用有关系,外连接,数据量正确性?)

4
三 11

Teradata SQL 优化的通用方法–规避全表查询

       

  • 字段提取要按照”需多少,提多少”的原则,查询时不要返回不需要的行,列,避免使用 “select * ” 进行全表查询
  • where  条件中任何对列的操作都将导致表扫描,它包括数据库函数,计算表达式等等,查询时尽量将操作移至等号右边.
  • 尽量避免 Like , in , or, not 等引起全表扫描的操作符.
  • 避免相关子查询,如果子查询不可避免,那么要在子查询中过滤掉尽可能多的行
  • 避免或简化排序
  • 变量名称尽量一致

4
三 11

Teradata SQL 语句优化通用方法–索引

       
       建立合理的索引,索引的设计要建立在对各种查询的分析和预测上,遵循以下原则:
       - 有大量重复值,且经常有范围查询,例如:(between , > , < , >= , <= ) 和order by ,group by 发生的列,可考虑建立群集索引.
       - 经常同时存取多列,且每列都含有重复值可考虑建立组合索引.
       - 组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列.

       有索引的尽量用索引,用到索引的条件写在前面.


4
三 11

Teradata 连接操作 — 查询条件的使用

       
       在内连接中加入条件,无论是加到 join 子句,还是加到 where 子句,其效果完全一样.

       外连接情况就不同了:

  • 当把条件加入到 join 子句时,数据库会返回外连接表的全部行,然后使用指定的条件返回第二个表的行.
  • 当把条件放到 where 子句时,数据库先进行连接操作,然后使用 where 子句对连接后的新表进行数据筛选. (此处有待验证,印象中,teradata 会先进行 where 条件的限定,再做连接)

4
三 11

Teradata 操作语言 — SQL

       
       根据各种 SQL 语句的功能不同,可以将其分成以下三大类:
       (1) 数据定义语言 (DDL) :用来在系统中创建或修改各种对象的结构,也可以用来删除系统中已有的对象,其命令集中主要包括:
       - CREATE : 创建一个新的数据库,用户,数据库对象或索引
       - 删除一个已存在的数据库,用户,数据库对象或索引
       - 修改一个表结构和保护定义,启动或禁止触发器

       (2) 数据操作语言 (DML) :用来存取对象中的信息. 因此, DML 是 SQL 中使用最频繁的语言.其命令集中主要包括:
       - SELECT : 执行关系查询
       - INSERT : 在表中增加新行
       - UPDATE : 修改表中已存在行的值
       - DELETE : 删除表中已存在的行

       (3) 数据控制语言 (DCL) : 用来控制用户存储数据库的权限或者方式,其命令集中主要包括:
       - GRANT : 赋给用户权限
       - REVOKE : 去除用户权限
       - GIVE : 转让用户所有权


4
三 11

Teradata 的数据存储

  • Teradata 通过  HASH 算法,通过 AMP 将数据随机或均匀的分布到存储设备上
  • 每个 AMP 负责表的记录行的一个子集
  • 负载的均匀分布取决于数据的均匀分布
  • 数据分布通过 PI (PRIMARY INDEX) 来实现:
  1. 每张表都必须有一个PI
  2. 如果建表时未指定 PI ,系统将使用表中第一个不能为空的字段做为 PI
  3. PI 字段不能修改
  4. PI 可以是一个字段或多个字段