Insert into Select 语句优化 本帖最后由 mvsean 于 2009-10-15 09:25:06 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我试着跑了3个月的数据,Oracle 给出的顺序是 1.CTF_INDEX1 INDEX(RANGE SCAN) 2.CTF TABLE ACCESS(BY INDEX ROWID) 3.SORT(GROUP BY) 4.INsert 执行时间3小时,3个月的数据。 用EXPLAIN PLAN 分析下,看看cost是多少..建议:1.用Hint 提示减少操作时间 INSERT /*+Append*/ INTO tab1 SELECT * FROM tab2;2. 采用不写日志及使用Hint提示减少数据操作的时间。建议方案是先修改表为不写日志: sql> alter table table_name NOLOGGING; 插入数据:INSERT /*+Append*/ INTO tab1 SELECT * FROM tab2;插入完数据后,再修改表写日志: sql> alter table table_name LOGGING; 这里的区别就在于如果插入数据的同时又写日志,尤其是大数据量的insert操作,需要耗费较长的时间。3. 在相关列上建索引, 注意,如果code列上有索引,code <> '000000000000000' 将会限制索引,应改成code < '000000000000000' and code > '000000000000000' insert 的时候,你可以看一下执行计划..... 非常感谢,我来按前辈说的来做。 关于第三点,我也曾看文章中提到过, <> 会限制索引, >= <= 也会限制索引么?我当时看到文章中提到后自己试过,就 select * from 而言,当时感觉不到 <> 有限制索引。今天你再次提到,我又测了下,确实在 count() sum() 聚集的时候,有明显的差异。 对于此sqlcode <> '000000000000000' And getdate >= '20080101' And getdate <= '20081231' ,做如下优化:1,将code <> '000000000000000' 换成 code in ('000000000000000')2,将getdate >= '20080101' 换成 getdate > '20071231' 3,将getdate <= '20081231' 换成 getdate < '20090101' 你把这历史数据的执行可以做个JOB放到半夜去执行 7楼的sql语句优化方案比较完整 shell实现查找orcale数据库 一次update多个有一定规律的数据 Oracle 10.1.0.5.0 的一个bug? 请教如何使用union才能达到想要的效果 关于上传和下载 文件的大小 不一样的问题????十万火急!!!!! 求教一个问题 如何在ORACLE过程的游标中动态更新当前行? 高分请教,在Win2000 pro中如何TNS服务不能启动,如何处理! 上海朋友注意了,水晶报表专业免费培训(非广告) 请教一个函数,日期合法性函数是什么? 急求一个复杂SQL查询语句! ql/sql编程
2.CTF TABLE ACCESS(BY INDEX ROWID)
3.SORT(GROUP BY)
4.INsert
执行时间3小时,3个月的数据。
用EXPLAIN PLAN 分析下,看看cost是多少..建议:
1.用Hint 提示减少操作时间
INSERT /*+Append*/ INTO tab1
SELECT * FROM tab2;2. 采用不写日志及使用Hint提示减少数据操作的时间。
建议方案是先修改表为不写日志:
sql> alter table table_name NOLOGGING;
插入数据:
INSERT /*+Append*/ INTO tab1
SELECT * FROM tab2;
插入完数据后,再修改表写日志:
sql> alter table table_name LOGGING;
这里的区别就在于如果插入数据的同时又写日志,尤其是大数据量的insert操作,需要耗费较长的时间。3. 在相关列上建索引, 注意,如果code列上有索引,code <> '000000000000000' 将会限制索引,应改成code < '000000000000000' and code > '000000000000000'
关于第三点,我也曾看文章中提到过, <> 会限制索引, >= <= 也会限制索引么?
我当时看到文章中提到后自己试过,就 select * from 而言,当时感觉不到 <> 有限制索引。
今天你再次提到,我又测了下,确实在 count() sum() 聚集的时候,有明显的差异。