zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    Redis学习笔记-安装篇(Centos7)
    图片上传预览方式,了解下?
    Angular中依赖注入方式的几种写法
    Javascript实现打开或退出浏览器全屏
    从头开始学Web开发—CSS_01
    JavaScript DOM知识 (一)
    javascript中的scroll事件
    javascript中继承的实现
    认识Javascript中的作用域和作用域链
    javascript中的闭包
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/4881756.html
Copyright © 2011-2022 走看看