linux update语句,关于Update语句的调整(5-1)
調(diào)整方法二:建立臨時表+Merge
(1)
1.調(diào)整方法二:建立臨時表+Merge
通過建立臨時表保存中間結(jié)果并結(jié)合merge語句的方法對語句進(jìn)行調(diào)整。
背景知識簡介
l臨時表簡介
數(shù)據(jù)庫中的所有會話均可以訪問臨時表,但只有插入數(shù)據(jù)到臨時表中的會話才能看到本身插入的數(shù)據(jù)。可以把臨時表指定為事務(wù)相關(guān)(默認(rèn))或者是會話相關(guān):
ON COMMIT DELETE ROWS:指定臨時表是事務(wù)相關(guān)的,Oracle在每次提交后截斷表。
ON COMMIT PRESERVE ROWS:指定臨時表是會話相關(guān)的,Oracle在會話中止后截斷表。
通過使用Oracle的臨時表后可以并行的對數(shù)據(jù)進(jìn)行處理,有效的提高了數(shù)據(jù)處理的速度。
下面是創(chuàng)建臨時表的例子
CREATE GLOBAL TEMPORARY TABLE TEMP_TEST
AS
SELECT *FROM DBA_OBJECTS
WHERE 1 = 2
/
CREATE INDEX IDX_OBJECT_ID ON TEMP_TEST(OBJECT_ID)
/
在臨時表上插入數(shù)據(jù)比在普通表上插入數(shù)據(jù)要快得多:
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/
表已創(chuàng)建。
已用時間: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/
表已創(chuàng)建。
已用時間:00: 00: 00.02
SQL>
SQL> INSERT INTO TEMP_TEST_1 SELECT * FROM DBA_OBJECTS
2/
已創(chuàng)建47622行。
已用時間:00: 00: 01.04
SQL> INSERT INTO TEMP_TEST_2 SELECT * FROM DBA_OBJECTS
2/
已創(chuàng)建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把一張表中的數(shù)據(jù)插入到另外一張表中或者更新對應(yīng)的記錄,插入與更新由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/
表已創(chuàng)建。
已用時間:00: 00: 00.02
SQL> drop table t4
2/
表已丟棄。
已用時間:00: 00: 00.00
SQL> create table t4 as select * from dba_objects
2/
表已創(chuàng)建。
已用時間:00: 00: 00.07
SQL> create index idx_t3_id on t3(object_id)
2/
索引已創(chuàng)建。
已用時間:00: 00: 00.01
SQL> create index idx_t4_id on t4(object_id)
2/
索引已創(chuàng)建。
已用時間: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>
總結(jié)
以上是生活随笔為你收集整理的linux update语句,关于Update语句的调整(5-1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux怎么更改声音板卡顺序,51CT
- 下一篇: c语言程序运行结果怎么看,帮忙看看我这个