linux update语句,关于Update语句的调整(5-1)

本文介绍Oracle数据库中临时表的特性和使用方法,包括如何创建事务相关的临时表和会话相关的临时表,并通过实例展示使用临时表提高数据处理速度的优势。此外,还详细解释了Merge语句的基本语法及其应用场景,通过实例演示了如何利用Merge语句高效地对数据进行插入或更新操作。
摘要由CSDN通过智能技术生成

调整方法二:建立临时表+Merge

(1)

1.调整方法二:建立临时表+Merge

通过建立临时表保存中间结果并结合merge语句的方法对语句进行调整。

背景知识简介

l临时表简介

数据库中的所有会话均可以访问临时表,但只有插入数据到临时表中的会话才能看到本身插入的数据。可以把临时表指定为事务相关(默认)或者是会话相关:

ON COMMIT DELETE ROWS:指定临时表是事务相关的,Oracle在每次提交后截断表。

ON COMMIT PRESERVE ROWS:指定临时表是会话相关的,Oracle在会话中止后截断表。

通过使用Oracle的临时表后可以并行的对数据进行处理,有效的提高了数据处理的速度。

下面是创建临时表的例子

CREATE GLOBAL TEMPORARY TABLE TEMP_TEST

AS

SELECT *FROM DBA_OBJECTS

WHERE 1 = 2

/

CREATE INDEX IDX_OBJECT_ID ON TEMP_TEST(OBJECT_ID)

/

在临时表上插入数据比在普通表上插入数据要快得多:

SQL> SET TIMING ON

SQL>

SQL> DROP TABLE TEMP_TEST_1

2/

表已丢弃。

已用时间:00: 00: 00.00

SQL> CREATE GLOBAL TEMPORARY TABLE TEMP_TEST_1

2AS

3SELECT *FROM DBA_OBJECTS

4WHERE 1=2

5/

表已创建。

已用时间:00: 00: 00.01

SQL>

SQL> DROP TABLE TEMP_TEST_2

2/

表已丢弃。

已用时间:00: 00: 00.03

SQL> CREATE TABLE TEMP_TEST_2

2AS

3SELECT *FROM DBA_OBJECTS

4WHERE 1=2

5/

表已创建。

已用时间:00: 00: 00.02

SQL>

SQL> INSERT INTO TEMP_TEST_1 SELECT * FROM DBA_OBJECTS

2/

已创建47622行。

已用时间:00: 00: 01.04

SQL> INSERT INTO TEMP_TEST_2 SELECT * FROM DBA_OBJECTS

2/

已创建47622行。

已用时间:00: 00: 04.07

SQL>

我们看看,47622行记录插入临时表只需要01.04,而插入普通表则需要04.07。

lMerge语句简介

Merge语句的基本语法:

MERGE INTO .TABLE1

USING .TABLE2

ON (TABLE1.= TABLE2.)

WHEN MATCHED THEN

WHEN NOT MATCHED THEN ;

Merge把一张表中的数据插入到另外一张表中或者更新对应的记录,插入与更新由ON子句决定。

下面是使用Merge语句的一个例子:

SQL>

SQL> drop table t3

2/

表已丢弃。

已用时间:00: 00: 00.00

SQL> create table t3 as select * from dba_objects where rownum <= 30

0

2/

表已创建。

已用时间:00: 00: 00.02

SQL> drop table t4

2/

表已丢弃。

已用时间:00: 00: 00.00

SQL> create table t4 as select * from dba_objects

2/

表已创建。

已用时间:00: 00: 00.07

SQL> create index idx_t3_id on t3(object_id)

2/

索引已创建。

已用时间:00: 00: 00.01

SQL> create index idx_t4_id on t4(object_id)

2/

索引已创建。

已用时间:00: 00: 00.05

SQL> merge into t3

2using t4

3on (t3.object_id = t4.object_id)

4when matched then update set t3.object_name = t4.object_name

5when not matched then insert (t3.object_id,t3.object_name)

6values (t4.object_id,t4.object_name)

7/

47628行已合并。

已用时间:00: 00: 06.00SQL>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值