关于Teradata数据库优化的一些个人心得


    1、建表时用create multiset table而不用create set table,尤其是大表,因为set要去除重复记录,数据量多的时候,会对整个表进行检索,开销很大
    2、注意写代码时的关联条件,避免因写错代码而产生庞大的交叉积
    3、注意两表关联时尽量用PI关联,这样不会对全表进行检索,否则开销很大
    4、注意两表join的时候,除了关联条件必须写在on之后之外,其它条件尽量写在where之后,因为写在on和写在where之后会产生不同的结果集
    5、写where条件时,尽量先把大部分记录过滤掉,然后再进行两表连接。当where后有很多条件时,系统会从右往左依序过滤,所以,尽量把能过滤大部分记录的条件写在最右边(关联条件除外)
    6、尽量用exists或not exists而不要用in或not in
    7、在选择distinct和group by的时候,要考虑:如果distinct出来的结果集占原表的大部分的时候,则选用distinct,否则就用group by,一般情况下,尽量选用group by
    8、写select的时候,尽量把具体的字段写出来,尽量避免写"select * 。。。",因为这样写,系统会在内部对“*”号进行转换,会增大系统开销
    9、假设t表有一个a字段是int型,写条件时,尽量在where后写和原表类型一致数据类型,避免其在内部转换,增大开销。例如:
    不建议这样写:
    "select 。。。 from t where a='123' ",
    建议这样写:
    "select 。。。 from t where a=123 "
    10、尽量少用嵌套select,尤其是大表更要避免。即使要用,也要尽可能在where中加好过滤条件,使子查询得出的结果集记录数尽量少,这样会减小查询所耗系统开销,提交效率
    11、如果某个表被反复检索,而检索的条件大体都相同,为了提高效率,建议为这个检索建一个临时中间表,尽可能让查询基于这个中间表,以减少对原表的重复查询操作,提高效率(表数据量越大,就越建议这样)
    12、尽量使用">="或"<="而少使用">"或"<",因为带有"="号会帮助数据库准确定位于要检索的记录,而不用去耗精力找比某值大或小的下一个值。例如t表有一个为int型的m字段,有三个值,分别是2,3和5,
    不建议的写法是:
    "select 。。。 from t where m>3",
    建议的写法是:
    "select 。。。 from t where m>=5"
    13、在选择使用union或union all时,如果需要对两个结果的和集进行排序或排重时,则选择使用union,否则都尽量union all,因为union all会对两个结果集按先后顺序不做任何排序或排重操作,很简单很直接地union在一起,不会耗太多系统资源。一般情况下,建议使用union all
    14、为了提高查询效率,应适当地考虑引入冗余,把经常关键的字段写入表中,以免因反复与某表关联而损耗资源,除低效率
    15、尽量使用union而少使用or,例如:
   不建议这样写:
    "select 。。。 from t where a=。。。 or b=。。。"
    建议这样写:
    "select 。。。 from t where a=。。。 union select 。。。 from t where b=。。。"
    16、使用like的时候,尽量like索引字段,而尽量写成: "like 'abc%'"或"like '%abc'",而尽量不要写成:"like '%abc%'"。而且尽量把like写在where里的左边。当然,很多时候是不得不写成两头都带"%"通配的,这要看具体的情况
    17、尽量不要用is null或is not null来做条件,因为空值不会有索引,只能全表扫描
    18、对于百万级的表在使用update时,如果update的数据记录大于总记录数的10%,则应考虑其它方法,比如用delete+insert
    19、两表之间进行join时,关联条件字段名尽量一致,且尽量使用位于PI上的列
    20、建表时,在定义字符串字段时,如果能确定它的宽度,则尽量使用char,而避免使用varchar
    21、在进行查询或多表间进行join时,注意尽量先排除或过滤NULL字段,或先将原表中的NULL字段进行处理之后再进行查询或join
    22、在Teradata中,数据是按PI值存放于不同的AMP中的,所以,要尽量使表在各个AMP中的数据记录分布均匀,也就是说在定义PI的时候,尽可能考虑唯一性或低重复性

    以上是我个人的观点和总结,难免会有疏漏,还望大家多批评指正!

  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值