sqlserver不能直接create table as select


 sqlserver不能直接create table as select 

在sqlserver 下想復制一張表的,想到oracle下直接create table xxx as select * from ....即可。
但是結果卻是錯誤的,baidu一下發現。
sqlserver的語法是 : select * into tablenew from tableold

分類: Linux

 

1. 文檔說明

在工作中經常用insert into select 與 create table as語句來進行表單數據的復制;當復制表的數據量很小的時候兩個語句的效率區別不大,但當表的數量級別達百萬級以上的時候,就會有很明顯的效率區別;

本文檔也也分成兩個部分進行報表數度的測試;

一、 insert into select 與 create table as的效率測試;

二、 用create table as方法時性能的調優;

2. Insert into select 與create table as的性能測試

測試環境:ORACLE版本:10.2.0.2 PGA:1G SGA:1G 數據庫:非歸檔模式

2.1 create tables as的測試,語句:Create Table zz_J_3ABSSI as Select * From J_3ABSSI

測試環境:表J_3ABSSI數據74萬,該表沒有索引;

執行時間:280S

 

2.2 Insert into select的測試,語句:

Truncate Table zz_J_3abssi;(先truncate表保留表的結構)

Insert Into zz_J_3abssi ("J_3ABSNR","J_3AHBSP","J_3ABSKZ","J_3AEBSP","WERKS","LIFNR","J_4KSCAT","MATNR","J_3ASIZE","MENGE","DABMG","IAMNG") Select "J_3ABSNR","J_3AHBSP","J_3ABSKZ","J_3AEBSP","WERKS","LIFNR","J_4KSCAT","MATNR","J_3ASIZE","MENGE","DABMG","IAMNG" Fromsapsr3."J_3ABSSI"

執行時間:1255S

 

2.2 總結:create table as比insert into select具有更好的性能越提升4倍以上;

原理分析:create table as是ddl語句,insert into select是dml語句,insert into select每一條記錄的時候都會產生undo和redo,整個過程相比create table as產生的redo和undo相當多,因此整個過程會慢也是正常的;但是create table as使用的前提是目標表的結構不存在才能使用;

當有大量數據的時候不推薦使用Insert into as,因為該語句的插入的效率很慢;

 

2.3 延伸:網上有朋友在測試的時候增加了nologging和parallel參數,能夠提升相應的執行效率;但是在實際中測試中,發現並沒有實際效率的提高;

增加了nologging但是數據庫還是會寫日志,該參數只有在進行直接路徑寫的時候才有效,關於什么情況下數據庫會運行直接路徑寫,請各位大神網上查詢,應該會知道答案;

Parallel提高效率,小弟還沒有想明白,請各位大嬸幫忙回復;

 

3. create table as性能的提升

在確定了用create table as的方法進行復制數據的時候,提升該語句的效率成了繼續研究的方法;

3.1 分析優化方法:

create table as的語句,該語句主要有兩個步驟:

步驟一、讀的過程:數據磁盤到sga,然后從sga到pga(如果這個時候pga不夠大,那么就會寫到臨時表空間,該步驟相當影響效率);

步驟二、寫的過程:寫redo、undo;

3.2 調優方法

a) 增加sga和pga的大小,pga從1g增大到3g;sga從1g增加到3g

b) 增加redo log的大小,從當前的50M每個增加到1G每個;

3.3 實驗驗證

a) 實驗結果表明,增加redo log的大小影響速度不大,但還是有稍微的提升(不信的朋友可以測試)

b) 增加sga和pga的大小,很明顯的提升了整個復制的速度,效果粉嚇人,整整提升了10倍;(這里不再貼測試截圖,各位看官自己動手測試下,注意表的大小要大於PGA時效果比較顯著)

http://blog.itpub.net/12679300/viewspace-773739/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM