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/

sqlserver不能直接create table as select的更多相关文章

  1. select into 、 insert into select 、create table as select复制表

    Insert是T-sql中常用语句,Insert INTO table(field1,field2,...)  values(value1,value2,...)这种形式的在应用程序开发中必不可少.但 ...

  2. oracle数据库【表复制】insert into select from跟create table as select * from 两种表复制语句区别

    create table  as select * from和insert into select from两种表复制语句区别 create table targer_table as select ...

  3. 慎用create table as select,一定要注意默认值的问题

    再做一些数据迁移时候,很多人会使用create table  as select * from table where id=-1的方式来年建立一摸一样的表,但是这样做有个很大的弊端,不能将原表中的d ...

  4. create table 使用select查询语句创建表的方法分享

    转自:http://www.maomao365.com/?p=6642 摘要:下文讲述使用select查询语句建立新的数据表的方法分享 ---1 mysql create table `新数据表名` ...

  5. MySQL中表复制:create table like 与 create table as select

    CREATE TABLE A LIKE B 此种方式在将表B复制到A时候会将表B完整的字段结构和索引复制到表A中来. CREATE TABLE A AS SELECT x,x,x,xx FROM B ...

  6. MySQL中表复制:create table like 与 create table as select

    1    CREATE TABLE A LIKE B此种方式在将表B复制到A时候会将表B完整的字段结构和索引复制到表A中来. 2.    CREATE TABLE A AS SELECT * FROM ...

  7. Create table as select

    create table xxx as select create table table1 =; 根据table2的表结构,创建tables1 create table table1 as sele ...

  8. 根据查询结果创建新表create table .. as (select....)

    一张表 student 查询数学和英语都是90分以上的同学,并创建一张新表 test1

  9. CREATE TABLE 表名 AS SELECT 语句

    1.新表不存在复制表结构即数据到新表 ? 1 2 create table new_table select * from old_talbe; 这种方法会将old_table中所有的内容都拷贝过来, ...

随机推荐

  1. Wake-On-LAN待机或休眠模式中唤醒

    Wake-On-LAN简称WOL,是一种电源管理功能:如果存在网络活动,则允许设备将操作系统从待机或休眠模式中唤醒.许多主板厂商支持IBM提出的网络唤醒标准.该标准允许网络管理员远程打开PC机电源,以 ...

  2. android uiautomator自己主动化測试

    前提是自己电脑上配置好JDK,android和ant的环境 1.命令行下进入\Android-sdk\tools\文件夹下,执行命令:    android list    查看相应android版本 ...

  3. 浅谈android的am命令

    android系统为大家提供了adb工具,在adb的基础上执行adb shell就可以从PC上对手机侧执行shell命令.和pc的linux系统一样,在系统的默认路径syste/bin下面是可执行程序 ...

  4. Andriod开发之浏览器开发(WebView)

    1.创建一个WebView在XML文件 <WebView android:id="@+id/webView" android:layout_width="match ...

  5. hdu2175汉诺塔IX

    汉诺塔IX Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  6. 讨论JDK的File.equal()

    我们一般比较两个文件中的对象是相同的文件,通常使用java.io.File.equal().这里,equal()是不是文件内容的比较结果为.象是否指向同一个文件. File的equal()方法.实际上 ...

  7. htc one x刷机记录

    这几天有些空余时间都用来刷htc one x,来说说刷机的艰难史吧. 首先是利用百度云rom刷机,本来一直用小米系统,突然发现百度云也能够搞个,所以心血来潮要刷个百度云,先利用软件解锁,哪知道没细致看 ...

  8. android手机SD卡中的android_secure目录

    .android_secure 是官方app2sd的产物,删了之后装到sd卡中的软件就无法使用了.里面有非常多.asec的文件,都是装到SD卡上的软件,可是一般装到sd卡中的程序被卸载了.androi ...

  9. sensor调试过程HAL层数据不能被转移到app

    最近调试e-compass传感器,我遇到了一个奇怪的问题,驱动器正常报告数据.但该数据到HAL后该层已经无法上传app. 经debug,我发现这是一个供应商派的代码存在bug,open的fd没有设置N ...

  10. 安卓的sqlite增删改

    基于安卓的sqlite增删改,笔记学习: 1.使用LinearLayout 布局生成,增删改的页面如图 代码布局如下: <LinearLayout xmlns:android="htt ...