3.db2性能和优化

db2中有分区、表空间、日志空间等的概念,因此在操做db2数据库时候,注意以上的设置,会大大提高sql的运行速度,也方便管理人员的管理和维护。了解其原理后,你会发现db2是典型的分布式集群算法

1.db2的存储结构sql

假设仓库主机如今有40个节点,节点号为0-39升序排列,40个节点,即有40个分区,每一个分区大小一致,且每一个分区都有本身的表空间和日志空间。数据库

2.指定表空间分布式

表空间是存储表里数据记录的地方。性能

3.指定分区键  partitioning key大数据

分区键的做用:在向表里面insert或者load数据时,是经过哈希算法根据分区键来计算出节点号,而后把分割的数据送往此节点,而后装入数据。优化

分区键的指定:指定分区键时通常要指定那些此列数据内容有很大差别的那些列,好比手机号码,id_no等,这样计算出的节点号分布比较均匀,数据才能均匀分布存放在40个节点。操作系统

不指定分区键:若是建表的时候没有指定分区键的话,系统默认使用表的第一个字段,分区键未指定或者分区键指定不恰当,会致使状况。日志

4.增长一个列blog

Alter table tab_tmp add column ph varchar(11)

说明:列增长后将不能删除。DB2中列加上后数据类型也不能改变,惟一能改变的是增长varchar类型的长度,只能增大。

5.修改表名

Rename  bug.temp_tab  to temp_tab2;

说明:temp_tab2不存在,方可执行成功。而且temp_tab2不加前缀,修改为功后表名为:bug.temp_tab2。

6.建立视图

create view  as select id_no,phone_no from com.com_result_tab where ...

说明:视图惟一能修改的是引用类型列,改变列的范围。其余定义好了都不能修改。当视图基于的基表drop后,视图变为无效。建立视图,能够修改字段名称,对原表信息是一种保护。

7.表的左链接 left join。以及左表的选择。

选择1: 数据量小的表做为左表(业务逻辑容许的状况下)。

选择2:将使用条件筛选的表做为左表。

选择3:具备索引选择操做的表做为左表,不然每扫描左表中的一行,就要扫描一遍整个表。

选择4:重复记录少的表更趋向于做左表。

选择5:外关联时,on后面仅仅存放关联条件(也就是说必须是左右表的字段比较),对于关联表内部的条件应当放在where子句中,除非你想保留全部没有匹配上的记录。

8.尽可能不使用in(select id_no from tabs...)

9.表链接是必定注意两个字段类型是否相同

好比A表,id_no 类型为bigint; B表,id_no 类型为varchar();  此时以id_no做为链接条件,速度特别慢。

 

缘由1:当链接两个不一样类型的列时,其中一个列必须转换成另外一个列的类型,级别低的会被转换成高级别的类型,转换操做会消耗必定的系统资源;

缘由2:若是你使用两个不一样类型的列来链接表,其中一个列本来可使用索引,但通过转换后,优化器就不会使用它的索引了。

10.在查询中尽可能不要使用or

使用union合并两个不一样的查询结果集,这样查询性能会更好。

若是不是必需要不一样的结果集,使用union all效果会更好,由于它不会对结果集排序,去重。88

11.更新表统计信息

Runstats的做用是从新更新数据库系统对表的统计信息,这些信息在数据库生成执行计划时将被使用。

12.整理表存储碎片

若是一个表的数据量变化不少,与操做系统的文件系统同样就会产生存储碎片,须要从新收集数据碎片和分布数据,从而提升数据访问效率。

reorg table tab_name

另外能够经过reorgchk on table…来检查碎片是否须要整理

13.在大数据量插入操做

能够采用不写日志方式,

通常状况下插入数据时必须避免插入笛卡尔集

注意:但若是执行被中断,表将损坏,没法使用。

14.为避免锁冲突,能够采用脏读模式

前提对数据一致性要求不高

---------------------------------------------------------------------------------------------完美分割线----------------------------------------------具体操做。

1.当前库链接其余库

 db2 connect to db_name user db_id using db_pwd

 说明:密码得问相关的管理人员,咱们没法查看。name和id经过键入conn就能够显示。

2.建立视图

3.学会创建临时表

       假设有三张或者三张以上的表进行链接,并且每张表的数据量都不小,此时就创建一张临时表,将其中的两张表关联的结果插入临时表(tab_temp1),以后再与其余表进行关联。

       说明:数据量小的时候,看不出临时表的做用,可是数据量很到的时候,临时表能够避免让你等的很焦灼。

3.大量数据的插入操做

大量数据插入临时表中,采用不写日志的方式,避免日志满了。被force后,事务日志回滚,形成i/o繁忙。

4.对数据表进行过更新操做后记得commit

eg:insert into ;merge into;delete;update

显示提交事务,释放事务日志。

5.长时间不使用数据库记得断开数据库链接。

6.本身创建的临时表使用完以后记得删除

第一步:清空表数据

第二步:删除表

7.查询数据进行限定,必定不要select * from 

8.初次遇见本身不知道的表,不要进行update 或者delete 操做,能够本身创建临时表玩。

相关文章
相关标签/搜索