1、select * from (...) where rownum<3;一晃而过
2、select * from (...)如果完全执行,将所有结果集都查出来,是很慢。大约几百秒的样子。但是
3、insert into tab 1 select * from (...) where rownum<3; 看执行计划,无论第一条还是所有,都是和2一个执行计划。
而且根本就执行不完,1个小时也是他。如果4、insert into tab 1 select * from (...id=22) ;id为其中一个表的主键,则一晃而过,能成功插入。
晕了,用了这么久oracle ,第一次发生这种事。
2、select * from (...)如果完全执行,将所有结果集都查出来,是很慢。大约几百秒的样子。但是
3、insert into tab 1 select * from (...) where rownum<3; 看执行计划,无论第一条还是所有,都是和2一个执行计划。
而且根本就执行不完,1个小时也是他。如果4、insert into tab 1 select * from (...id=22) ;id为其中一个表的主键,则一晃而过,能成功插入。
晕了,用了这么久oracle ,第一次发生这种事。
解决方案 »
- 关于数据更新问题
- 关于FORALL 批量提交问题
- 创建临时表报错
- ORACLE - Can not allocate log, archival required
- 数据库牵移所碰到滴一个最头痛问题
- sql语言中有没有类似C语言中的switch case的语句??
- 为什么启动oracle是我必须要在DBA STUDIO里面一SYSTEM AS SYSDBA身份启动??
- 关于oracle 9i for linux的中文显示问题请教
- oracle11 r2 提示TNS-12541: TNS: 无监听程序
- 请教各位大佬执行插入语句时,如何生成 001 001001 001002 002 002001 002002这种编号,非常感谢!
- 表或视图不存在
- 请问,一个表空间下不同用户的表数据该怎么导出啊?
insert 是插入数据,更改数据,
这两个哪个快?哪个不快,很明显吧.
”这时就非常快。感觉insert into tab 1 select * from (...) 和select * from (...) 不是一个执行计划。insert into tab 1 select /*+ first_rows(1) */ * from (...) ,这样也是非常慢!
目前语句是这样
insert into ql_tz_total (total_ID, state, PERSON_CARD_ID, ql_job_id)
select aa.person_ID,'0',
LOOKUP_person(LOOKUP_image(aa.IMAGE_ID), 'FIELD_10') FIELD_10,
aa.QL_JOB_ID
from (select c.FEATURE_ID, c.IMAGE_ID, e.QL_JOB_ID
from total c, ql_tz_job e
where c.LOGIC_DB_ID = e.LOGIC_DB_ID
and c.total _ID > 0
and e.QL_JOB_ID = 322) aa
left OUTER JOIN ql_tz_total d on (d.QL_JOB_ID = 322 and
aa.total_id = d.total_id)
where d.total_id is null
and rownum<500000;原先是insert into ql_tz_total
(total_ID, state, PERSON_CARD_ID, ql_job_id)
select /*+ first_rows(1) */ cc.total_id, 0, a.FIELD_10, cc.ql_job_id
from person a,
image b,
(select aa.total_ID, aa.IMAGE_ID,aa.QL_JOB_ID
from (select c.total_ID, c.IMAGE_ID,e.QL_JOB_ID
from total c, ql_tz_job e
where c.LOGIC_DB_ID = e.LOGIC_DB_ID
and c.total_ID>0
and e.QL_JOB_ID = 322
/* and c.total_ID=29495518*/) aa
left OUTER JOIN ql_tz_total d on (d.QL_JOB_ID = 322 and
aa.total_id = d.total_id)
where d.total_id is null) cc
where a.person_id = b.person_id
and b.image_id = cc.image_id--628
and rownum<2;
另:
insert into tab 1 select * from (...) where rownum<3; --前两条插入tab1
尤其是主键索引和非唯一索引,要慎用,还有如果数据不多的话,这个表不是不有大量的DELETE操作,DELETE删除数据时,会使索引变得臃肿,如果是这样,你要检查代码,以后不要做DELETE操作了,表已经慢了,那就只能做rebuild,然后就好了。