把一个表的数据保存到另外一个表中,有没有什么高效的处理办法 类似insert into select from的办法当然是排除的了,因为数据量很大,转储频率也很高原表中数据需要保留,之后对原表的更新不再反应到新表中,新表之后只有查询操作,不再更新 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 直接使用create table table_Name as select col_..... from table_Name2;只有效率相对较高 insert/*+append*/ into select from 很快 可以用exp命令把源表导出成一个dmp文件,然后把源表换一个名字,再把exp出去的表再imp进来!!好象exp/imp命令要快一些~看这样能否解决问题? 楼主这种做法(分开存储,一个用来进行事务操作,一个用来进行查询操作)和secondeLife的做法很像,的确不错。 最快的办法是用exp和imp导入的时候要忽略错误。 我找了个中表(1000万记录-5GB)测试了一下,exp/imp的方法仅导出就要23分钟,导入我就没有试了create as的方法速度快一些,不含建索引只需要12分钟,就包含了导出+导入的操作,但是和insert的方式差不多,只是少了手工建表的步骤,但也使我不知道怎么指定表空间物化视图我上网随便看了一下,首先执行效率不敢保证,其次视图本身对数据更新都是有反映的,我需要是保存某个时点的状态数据,不能随原表的更新而更新,不知道有没可能实现对于大表操作(1亿条记录以上),我不知道如何避免长事务的发生,以前我在informix下是把表或库改为无日志方式来做的,oracle不知道支持这种方式否,也请指教问的问题有点多,分数好像给低了一点,我再加点吧,谢谢各位捧场的和帮忙的,谢谢! 支持bzszp的方案,有效地排除创建记录的复杂程度才是关键。文件读写的IO有一些是必须的,没有办法去优化他的。再加上tom_cheung提到的的appand关键字应该是很高效了。不支持使用Exp/imp这样的方式,毕竟让服务器自己做事情要比通过客户端和服务器交互要快得多。不管你的客户端是否安装在服务器本地。 1、create table t NOLOGGING as select * from2、或者使用Nologging建表以后使用下列语句插入insert /*+ append */ into select from 这就是oracle提供的对于大数据量导入的解决方案,如果你尝试比oracle聪明,那我敢保证你会撞墙。两种做法都不生成redo和undo日志。如果你不清楚这意味着什么,参见:expert one on one oracle: chapter 5 说句不客气的话,楼上大部分都是半桶水,如果不指定nologging,那么还是会生成redo log,即使使用了append也比简单的insert快不多少。尝试使用exp/imp的,就是试图比oracle聪明。其实这就像cpu明明提供了“加法”的指令你偏偏不用,非要使用“减去负的被减数”来实现加法功能一样,如果会更快那就有鬼了。ps:secondLife是一个多人在线游戏,虚拟社区。 向fenixshadow致谢,非常高兴问题得到真正的解决!! 不客气,如果你能把测试结果发到这里那就最好了,可以造福后人。比如: 普通insert insert /*+ append*/ insert /*+ append*/ with nologging CTAS CATS with nologging exp/imp 时间一 二 三 四 五 六 上网一搜nologging就可以找到很多测试结果,自己也可以试试呀我之前是不知道关键字该用什么以前是用informix的,那边叫raw fenixshadow 不要以偏概全,即使使用了nologging关键字见表,索引有效的话仍然会有很多的redolog产生。append本身是消除oracle做执行计划的时间对redo的影响貌似不大的,当然他也有助于提高insert 的性能。 如果表中有clob或者blob字段呢?! [求助]一条语句同时删除两个表里的多条记录 Oracle 存储过程传参 oracle 9i与oracle 10g 求一存储过程(sqlserver转oracle) 请教一个把多行记录组合成一行记录的查询(两个表连接) 问个简单问题 SQL Server 到 Oracle 执行存储过程出错 which version Oracle support Pro*C . 数据创建表空间、回滚段设置问题? oracle中的嵌套表中存储海量数据问题,恳求高手指教! EXP问题。如何最后导出sequences
只有效率相对较高
好象exp/imp命令要快一些~
看这样能否解决问题?
用exp和imp
导入的时候要忽略错误。
create as的方法速度快一些,不含建索引只需要12分钟,就包含了导出+导入的操作,但是和insert的方式差不多,只是少了手工建表的步骤,但也使我不知道怎么指定表空间
物化视图我上网随便看了一下,首先执行效率不敢保证,其次视图本身对数据更新都是有反映的,我需要是保存某个时点的状态数据,不能随原表的更新而更新,不知道有没可能实现
对于大表操作(1亿条记录以上),我不知道如何避免长事务的发生,以前我在informix下是把表或库改为无日志方式来做的,oracle不知道支持这种方式否,也请指教
问的问题有点多,分数好像给低了一点,我再加点吧,谢谢各位捧场的和帮忙的,谢谢!
再加上tom_cheung提到的的appand关键字应该是很高效了。
不支持使用Exp/imp这样的方式,毕竟让服务器自己做事情要比通过客户端和服务器交互要快得多。
不管你的客户端是否安装在服务器本地。
2、或者使用Nologging建表以后使用下列语句插入
insert /*+ append */ into select from 这就是oracle提供的对于大数据量导入的解决方案,如果你尝试比oracle聪明,那我敢保证你会撞墙。两种做法都不生成redo和undo日志。如果你不清楚这意味着什么,参见:expert one on one oracle: chapter 5
secondLife是一个多人在线游戏,虚拟社区。
比如: 普通insert insert /*+ append*/ insert /*+ append*/ with nologging CTAS CATS with nologging exp/imp
时间一 二 三 四 五 六
我之前是不知道关键字该用什么
以前是用informix的,那边叫raw
不要以偏概全,即使使用了nologging关键字见表,索引有效的话仍然会有很多的redolog产生。
append本身是消除oracle做执行计划的时间对redo的影响貌似不大的,当然他也有助于提高insert 的性能。