你这个SQL语句中,我发现影响效率的几处是:
1. ‘!=’运算符;
2. MAX()函数;
3. SELECT子句中条件太多。
1. ‘!=’运算符;
2. MAX()函数;
3. SELECT子句中条件太多。
解决方案 »
- WMSYS.WM_CONCAT()函数无法使用,提示标识符无效。
- oracle下orcl文件夹中adump\bdump\cdump\dpdump\pfile\udump问价,udump85G
- 关于tnsnames.ora文件的问题
- pl/sql 中 查询问题 用到函数substr
- 紧急问题:oracle 控制文件和数据文件不一致
- 专门配置一台透明网关服务器连接Sql Server 2K,跟Oracle数据库服务器分开,DBLink也建好了,调用不了,老是提示“TNS: 无法处理服务名”
- 如何通过判断当前时间来执行不同的SQL语句?
- 如何spool 使用
- 关于导出数据库文件出现乱嘛的问题
- pritition by range,分区问题
- 请教一个问题。
- ORACLE 9关于OEM的问题
难道大家都忘了union了吗?你可以这样,那你的8万记录分成两个表,作union后就是没有重复的记录了。
我觉得要比上面的要快的多。
create table yourbak as select * from yourtable where 不重复的条件;
重新建立一个表,然后再把不重复的纪录替换你原来的表
================================================================
★★ chen_cyh(を愛た) ●
create table bak as select STARTTIME,OMCID ,MMID,SUBJ_ID_1,SUBJ_ID_2, SUBJ_ID_3,SUBJ_ID_4
,SUBJ_ID_5 from T_U_PMC10 group by
STARTTIME,OMCID ,MMID,SUBJ_ID_1,SUBJ_ID_2, SUBJ_ID_3,SUBJ_ID_4
,SUBJ_ID_5
速度很快
================================================================
★★ chen_cyh(を愛た) ●
insert 是对表操作最快效率的语句之一,
================================================================
★★ chen_cyh(を愛た) ●
在DELETE
如你的SQL语句修改为:
DELETE FROM T_U_PMC10 A
WHERE A.ROWID!=(SELECT MAX(ROWID) FROM T_U_PMC10 B
WHERE A.STARTTIME=B.STARTTIME (+)
AND A.OMCID=B.OMCID(+) AND A.MMID=B.MMID(+)
AND A.SUBJ_ID_1=B.SUBJ_ID_1(+)
AND A.SUBJ_ID_2=B.SUBJ_ID_2(+)
AND A.SUBJ_ID_3=B.SUBJ_ID_3(+)
AND A.SUBJ_ID_4=B.SUBJ_ID_4(+)
AND A.SUBJ_ID_5=B.SUBJ_ID_5)(+);一般效率都可以提高几十个级!
祝你好运。
此时插入数据时,可以用insert into ... select * from ..
2。在该表上建立主键,用游标一条条插入
此时处理异常:
WHEN DUP_VAL_ON_INDEX THEN
NULL;
我觉得速度慢是因为子查询中的where子句对表中的每一条记录都执行一次,所以很慢,这才8万条,我还有上百万条的表呢:(
我觉得速度慢是因为子查询中的where子句对表中的每一条记录都执行一次,所以很慢,这才8万条,我还有上百万条的表呢:(
update mytable --先更新在表中已存在的纪录
set ....
where exists (select 'x' from mytable
where ....);insert into mytable (....) --添加在表中不存在的纪录
select ... from temp_table
where not exists (select 'x' from mytable
where ...);
update mytable --先更新在表中已存在的纪录
set ....
where exists (select 'x' from mytable
where ....);insert into mytable (....) --添加在表中不存在的纪录
select ... from temp_table
where not exists (select 'x' from mytable
where ...);
update mytable --先更新在表中已存在的纪录
set ....
where exists (select 'x' from mytable
where ....);insert into mytable (....) --添加在表中不存在的纪录
select ... from temp_table
where not exists (select 'x' from mytable
where ...);
select ... from temp_table
where not exists (select 'x' from mytable
where ...);会比我说的第一种(既先插入,后删除重复)方法要快很多吗?
不过我无法从text文档中copy中文到ie里,否则可以贴一点出来