先说一下为什么会有这样的测试:年前面试一家电信公司,主考orcale (java的基础),说用ssh,但不用hibernet,,没有过,回来想想.此类公司应该是查询数据量大,才不用H结构,效率第一, 马上要开始找工作了,好好的实习一下数据库的基础:
复习分组函数:
select row_number() over(order by d.mgr) dmgr,d.mgr,empno,ename,sysdate,round(d.avgsal) from emp e ,(select mgr,avg(sal) avgsal from emp
group by mgr) d where e.mgr=d.mgr and e.sal>d.avgsal order by e.empno;
先建一个emp表.以后调试等文章都以此表数据为基础:
名称 空值 类型
--------- -------- ------------------
EMPNO NOT NULL NUMBER(10)
ENAME VARCHAR2(255 CHAR)
MGR NUMBER(10)
SAL FLOAT(126)
HIREDATE DATE
MARRY CHAR(1 CHAR)
LOGINTIME TIMESTAMP(6)
建立自增长序列并插入少量数据,我先插入五条:
create sequence seq_emp start with ?;
insert into emp2 values(seq_emp.nextval,'mi ff',32,1026,sysdate,'1',sysdate);
利用自己表单表复制 几何倍增.几秒即有自己的大数据:不过最好是先复制一个表来保存原始数据:
用上查找id不大于3的题.
create table emp2 as select * from emp where empno < 3;
--也可以用:
create table emp3 as(select distinct * from emp2);
--以下为主要几何自复制数据代码:
insert into emp2 new(select * from emp2);
82 行已插入。
19 行已插入。
19 行已插入。
202 行已插入。
404 行已插入。
808 行已插入。
1,616 行已插入。
3,232 行已插入。
6,464 行已插入。
12,928 行已插入。
25,856 行已插入。
51,712 行已插入。
也可以将别的表的字段复制过来,以增加多点原始数据:
insert into emp2(empno,ename,logintime) select id,name,creatime from cost;
轻松得20万数据为例:
--.执行SQL语句删除重复记录 not in 与 != 时间相同
delete from emp2 a where a.rowid not in(select max(b.rowid) from emp2 b where a.empno=b.empno and a.ename=b.ename);
delete from emp2 a where a.rowid !=(select max(b.rowid) from emp2 b where a.empno=b.empno and a.ename=b.ename);
如此测试时间将近20秒,视个人电脑定:
数据越大,删除越慢!
那有没有更快的方法呢? 在删除的时候,大家看到是边查边删.这里优化一下.
建立两个表emp emp2的索引: 关联索引与单列索引 我又另建了两张表emp4
--对于表A,表B 的radecode, fundkey, pubdate建集合索引,对表B的dataid建立索引
create index idx_emp2 on emp2(ename,empno);
create index idx_emp41 on emp4(ename,empno);
create index idx_emp4 on emp4(maxid);
好.三个索引做好之后再运行 以上删除代码:
delete from emp2 a where a.rowid not in(select max(b.rowid) from emp2 b where a.empno=b.empno and a.ename=b.ename);
delete from emp2 a where a.rowid !=(select max(b.rowid) from emp2 b where a.empno=b.empno and a.ename=b.ename);
我这里再调试效果明显,至少节省一半时间,可能是数据不够多,.不知道朋友们试过之后删除是多少时间.
我也不多做调试了,过多会影响电脑寿命.
下一章将复习存储过程 /plSql