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/
sqlserver不能直接create table as select的更多相关文章
- select into 、 insert into select 、create table as select复制表
Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少.但 ...
- 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 ...
- 慎用create table as select,一定要注意默认值的问题
再做一些数据迁移时候,很多人会使用create table as select * from table where id=-1的方式来年建立一摸一样的表,但是这样做有个很大的弊端,不能将原表中的d ...
- create table 使用select查询语句创建表的方法分享
转自:http://www.maomao365.com/?p=6642 摘要:下文讲述使用select查询语句建立新的数据表的方法分享 ---1 mysql create table `新数据表名` ...
- 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 ...
- 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 ...
- Create table as select
create table xxx as select create table table1 =; 根据table2的表结构,创建tables1 create table table1 as sele ...
- 根据查询结果创建新表create table .. as (select....)
一张表 student 查询数学和英语都是90分以上的同学,并创建一张新表 test1
- CREATE TABLE 表名 AS SELECT 语句
1.新表不存在复制表结构即数据到新表 ? 1 2 create table new_table select * from old_talbe; 这种方法会将old_table中所有的内容都拷贝过来, ...
随机推荐
- ubuntu软件中心崩溃
网上找了下别人的解决方法(本人測试成功解决此问题): 提示说是lists出错 我的正是这样的情况 使用例如以下命令能够修复: 1.删除lists sudo rm /var/lib/apt/lists/ ...
- POJ 1659 Frogs' Neighborhood
转载请注明出处:http://blog.csdn.net/a1dark 分析:切图论切的第一道题.也是图论的例题.主要用到一个Havel-Hakimi 定理 有以下两种不合理的情形: (1) 某次对剩 ...
- 漫游Kafka介绍章节简介
原文地址:http://blog.csdn.net/honglei915/article/details/37564521 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息 ...
- SIP基本呼叫
我们首先来看下主要的呼叫流程. INVITEsip:69690067@beijing.chinamobile.com;user=phone SIP/2.0 From:"+8610696900 ...
- 升级到cocos2d-x 2.0.2代码差异
来自:http://www.cnblogs.com/TopWin/archive/2012/09/12/2682042.html 近期看cocos2d-x 2.0.2公布后升级了一下.升级后发现又出现 ...
- Cocos2d-x实现简单的翻牌效果
触发器互联网影响找了很多.有自己的点重写一个复杂的sprite类来实现.简单的操作来对引擎的使用CCOrbitCamera实现,但是,也存在一些问题,后变反了. 我在用的仅仅是一个简单的翻牌效果,点击 ...
- effective c++ 条款5 c++ 默默实现的函数
当写一个空类c++ 会为我们自动提供四个函数 1 默认构造函数 2 默认析构函数 3 拷贝构造函数 4 默认赋值运算符
- java多线程Future和Callable类的解释与使用
一,描写叙述 在多线程下编程的时候.大家可能会遇到一种需求,就是我想在我开启的线程都结束时,同一时候获取每一个线程中返回的数据然后再做统一处理,在这种需求下,Future与Callable的组合就派 ...
- google在线测试练习2
Problem Given a list of space separated words, reverse the order of the words. Each line of text con ...
- mod_python模块安装
两.mod_python 1.性能 使用mod_python的主要优势在于比传统CGI更高的性能. 一个測试,使用在Pentium 1.2GHz的机器上执行Red Hat Linux 7.3.使用4种 ...