db2 merge 操作的优化问题。

作者&投稿:兀有钧 (若有异议请与网页底部的电邮联系)
DB2 处理效率优化问题~

这么大的数据量,如果单纯是为本次任务,可以用load cursor来完成,如果要为以后使用,可以考虑把bcd,表做分表处理或做分区表如果存储够大,可以考虑做成多维表。如果没有特别的需要,我觉得还是不要在一张表中存这么大的数据,不管是维护,还是使用,都是很头痛的一件事。

在数据仓库中的转换和装载过程中,经常会使用MERGE语句,这里简单总结一下。MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE。 下面看个具体的例子: SQL> CREATE TABLE T AS SELECT ROWNUM ID, A.* FROM DBA_OBJECTS A;表已创建。SQL> CREATE TABLE T1 AS 2 SELECT ROWNUM ID, OWNER, TABLE_NAME, CAST('TABLE' AS VARCHAR2(100)) OBJECT_TYPE3 FROM DBA_TABLES;表已创建。SQL> MERGE INTO T1 USING T 2 ON (T.OWNER = T1.OWNER AND T.OBJECT_NAME = T1.TABLE_NAME AND T.OBJECT_TYPE = T1.OBJECT_TYPE)3 WHEN MATCHED THEN UPDATE SET T1.ID = T.ID4 WHEN NOT MATCHED THEN INSERT VALUES (T.ID, T.OWNER, T.OBJECT_NAME, T.OBJECT_TYPE);6165 行已合并。SQL> SELECT ID, OWNER, OBJECT_NAME, OBJECT_TYPE FROM T2 MINUS3 SELECT * FROM T1;未选定行MERGE语法其实很简单,下面稍微修改一下例子。SQL> DROP TABLE T;表已丢弃。SQL> DROP TABLE T1;表已丢弃。SQL> CREATE TABLE T AS SELECT ROWNUM ID, A.* FROM DBA_OBJECTS A;表已创建。SQL> CREATE TABLE T1 AS SELECT ROWNUM ID, OWNER, TABLE_NAME FROM DBA_TABLES;表已创建。SQL> MERGE INTO T1 USING T 2 ON (T.OWNER = T1.OWNER AND T.OBJECT_NAME = T1.TABLE_NAME)3 WHEN MATCHED THEN UPDATE SET T1.ID = T.ID4 WHEN NOT MATCHED THEN INSERT VALUES (T.ID, T.OWNER, T.OBJECT_NAME);MERGE INTO T1 USING T*ERROR 位于第 1 行:ORA-30926: 无法在源表中获得一组稳定的行这个错误是使用MERGE最常见的错误,造成这个错误的原因是由于通过连接条件得到的T的记录不唯一。最简单的解决方法类似:SQL> MERGE INTO T1 2 USING (SELECT OWNER, OBJECT_NAME, MAX(ID) ID FROM T GROUP BY OWNER, OBJECT_NAME) T 3 ON (T.OWNER = T1.OWNER AND T.OBJECT_NAME = T1.TABLE_NAME)4 WHEN MATCHED THEN UPDATE SET T1.ID = T.ID5 WHEN NOT MATCHED THEN INSERT VALUES (T.ID, T.OWNER, T.OBJECT_NAME);5775 行已合并。本文来自CSDN博客,转载请标明出处: http://blog.csdn.net/levma/archive/2007/06/18/1656396.aspx

easy .
1: number加上索引 ;
2: 查询语句加上with ur 指定隔离级别可以避免锁表

另外:number加上索引之后也就加快delete操作的效率


长垣县19236008498: db2 merge 操作的优化问题. -
柯宙欣路: easy .1: number加上索引 ;2: 查询语句加上with ur 指定隔离级别可以避免锁表 另外:number加上索引之后也就加快delete操作的效率

长垣县19236008498: MERGE语句优化,为什么没有走索引 -
柯宙欣路: 假如你有一个表,SQL> CREATE TABLE test_tab ( 2 id INT, 3 name VARCHAR(10), 4 age INT, 5 val VARCHAR(10) 6 ); 你的业务,有一个查询,是 SELECT * FROM test_tab WHERE name = 一个外部输入的数据 刚开始,数据不多的时候,...

长垣县19236008498: 请教JDBC操作AIX系统下DB2数据库REORG命令的问题 -
柯宙欣路: 代码页819实现了Latin-1(ISO/IEC 8859-1),用于IBM AS/400小型机.建库的时候CODESET 指定为GBK 那么该库的CODEPAGE 为1386 AIX下DB2默认的CODEPAGE为819 由于连接的客户端与数据库的CODEPAGE要一致 因此可以首先通过 db2 get db cfg for dbname 得到对应数据库的CODEPAGE 然后通过db2set设置DB2CODEPAGE 重启数据库后生效.CODEPAGE:DB2的代码页列表,1386:1386 (=x056A) PC Simplified Chinese Data GBK Mixed.

长垣县19236008498: 就数据库性能调整和优化问题,比较ORACLE和DB2的异同,尽量详细,3000字左右佳,谢谢大神们! -
柯宙欣路: 说实话,你这个问题真要大神才能回答.ORACLE和DB2能精通一个都是不错的了,要是两个都能精通的人实在不多.我只能在oracle的方面给点简单的说明,DB2实在不懂 优化器的工作原理或机制:ORACLE CBO基本成本的优化器,简单来说就是根据统计信息预测一下,到底哪一个执行路径的成本更低,然后选择最优的执行.利用优化器提高查询性能的方法:根据执行计划,看到底是修改SQL语句或者增加提示hint,来优化查询性能.性能分析和调优的命令的和工具: AWR,ADDM我一般就用这两个.加上执行计划基本上就差不多了

长垣县19236008498: DB2怎么样调优 -
柯宙欣路: reorg,runstat,db2advis.这些都是db2自带的命令.具体调优方法视具体情况而定

长垣县19236008498: oracle 中merge和update的区别,以及如何充分利用merge -
柯宙欣路: 因为merge具有按照条件获取更新或插入到表中的数据行,然后从一个或多个源头对表进行更新或向表中插入行两方面的能力. 这就使得你可以避免使用多个insert update delete语句.

长垣县19236008498: Oracle 存储过程面试题 -
柯宙欣路: 根据你现有的内容,做个完全同步的 merge into frp.t17_organ dusing frp.t40_organ s on (s.organno=d.organno) when matched then update set d.organname=s.organname,..... when not matched then insert values (s.organno.........)完整题目可以发我私信

长垣县19236008498: 数据库合并冲突有哪些 -
柯宙欣路: 数据库设计中,当概念设计结束后,往往要将合子ER图合并为总ER图,合并操作中常见的三种冲突是,属性冲突,命名冲突和结构冲突

长垣县19236008498: 数据库是DB2,多个索引都有某一个字段,那么DB2会执行那一个呢? -
柯宙欣路: 你的两个索引都是复合索引.所以字段的顺序是很重要的,索引的第一个字段是主索引码.索引B+树是根据主索引码构造的.index1(oid,name)和index1(name,oid)有天壤之别.看样子,oid是主码吧,它具有唯一性,所以,根据oid、name、...

长垣县19236008498: 数据库怎么优化?sql怎么优化 -
柯宙欣路: 1 避免无计划的全表扫描 如下情况进行全表扫描: - 该表无索引 - 对返回的行无任何限制条件(无Where子句) - 对于索引主列(索引的第一列)无限制条件 - 对索引主列的条件含在表达式中 - 对索引主列的限制条件是is (not) null或!= - 对索引主...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网