oracle 为什么查询数据很快 但是把数据插入临时表很慢

当查询一段sql时速度很快只需要十多秒,但是我把把sql的输入插入临时表中速度很慢很慢几乎要用十多分钟
查询时用了如下hints:
select/*+driving_site(t1) all_rows parallel(t1,4)*/
from table.
插入临时表用:
insert into table
select/*+driving_site(t1) all_rows parallel(t1,4)*/
from table.

从语法上分析。select只要做检索,而且你上面的select没有where子句,所以速度会很快,只是数据集会比较大。

而你的insert语句,是做了select所得条数的插入操作。你检索十多秒钟,估计有上百万的数据吧?也就是你做了百万次的插入操作。十分钟多很正常。

查询是吧数据从硬盘读到内存——database buffer cache这个缓存区。
而插入也是写入这个缓存区,只有等待DBWR线程写入,才会写入硬盘数据文件。这个会影响插入的性能,不过不是关键(它不是每一条插入都会写入硬盘)。

以上为我个人理解,如有误区请指正。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-05-17
查询 是读硬盘 读缓冲

插入 是写硬盘
相似回答