oracle10g、db2v95、sqlserver2000性能对比(用数据说话).doc

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

OraclelOg、Db2v9.5、SqlServer2000 性能对比(用数据说话)
1.
:db2oracle,
交一次相比,oracle性能相差不大,但db2、sqlserver性能相差比较大(除sqlserver删除的性
能有所下降外)。

2.前台java调用sql语句性能对比表:
结论:1.java向oracle,db2,sqlserver插入10000行数据后提交数据,与每插入1行数据提交一
次的性能对比,oracle性能最少提高3倍、db2性能最少提高6倍,sqlserver性能最少提高5 倍,如果批量处理与批量提交对比,oracle性能最少提高25倍,db2性能最少提高25 倍,sqlserver性能提高很小。

2. java向oracle,db2,sqlserver插入10000行数据后提交数据,与每插入1行数据提交
一次的性能对比,oracle的性能最高。

性能对比,oracle 性能最少提高16倍、db2性能降低1.6倍,sqlserver 性能最少提高1.6倍,如 果批量处理与批量提交对比, oracle 性能最少提高2.8 倍, db2性能最少提高1.3倍,sqlserver 性能最少提高1.2。

6. java 向oracle,db2,sqlserver 删除10000行数据后提交数据,与每删除
1行数据提
交一次的
性能对比,oracle 的性能最高
总结:后台相对于前台性能对比如下:
1. 批量插入操作,oracle 、db2性能差不多,sqlserver 有所提高。

2. 批量更新操作,oracle 、db2,sqlserver 性能差不多。

3. 批量删除操作,oracle 、db2性能差不多,sqlserver 有所下降
4. 批量提交插入操作,oracle 、db2,sqlserver 性能提高较大
5. 批量提交操作,oracle 、db2性能提高较大,sqlserver 性能差不多。

6.
批量提交操作,oracle 、db2性能提高较大,sqlserver 有所下降 从对比来看后台与前
台批量操作性能差不多,但后台与前台批量提交相比 性能都有较大的提高,而
sqlserver 反而有所下降。

脚本:
1.
做批量插入
1. oracle:
create table test (a in t,b char(10));
CREATE OR REP LACE P ROCEDURE dowhile(in cou nt int) as v1 INT;—
BEGIN v1 := in count; WHILE v1 > 0 loop
in sert into test values (v1, 'abed'); v1 := v1 - 1; --commit; END loop;
E ND ;
CREATE OR REP LACE P ROCEDURE dowhile commit(in cou nt int) as v1 INT;
BEGIN
3. java 向oracle,db2,sqlserver 更新10000行数据后提交数据,与每更新
一次的性能对比,oracle 性能最少提高13倍、db2性能降低 倍,如果批量处理与批量提交对比,
oracle 性能最少提高
倍,sqlserver 性能提高有所降低。

4. java 向oracle,db2,sqlserver 更新10000行数据后提交数据, 性能对比,oracle 的性能最高
5. java 向oracle,db2,sqlserver 删除10000行数据后提交数据,
1行数据提交
1.4倍,sqlserver 性能最少提高1.4 2倍,db2性能最少提高
1.3
与每更新 与每删除
1行数据提交一次的
1行数据提交一次的
oracle,db2
v1 := in _cou nt;
WHILE v1 > 0 loop
in sert into test values (v1, 'abed'); v1 := v1 - 1;
commit;
END loop;
END;
Exec dowhile(10000);
发费时间:0.281 秒
Exec dowhile commit(10000);
发费时间:0.734 秒
2.db2:
create table test (a in t,b char(10));
CREATE P ROCEDURE YDGFTEST01.DOWHILE (IN IN_COUNT i nt)
LANGUAGE SQL
SP ECIFIC DOWHILE
BEGIN
DECLARE
v1 int;
set v1= in_count; while v1>0 do
in sert into test values(v1,'abcd');
SET v1=v1-1;
end while;
END
CREATE P ROCEDURE YDGFTEST01.DOWHILE_COMMIT (IN IN_COUNT int) LANGUAGE SQL
SPECIFIC DOWHILE COMMIT
BEGIN
DECLARE
v1 int;
set v1= in_count; while v1>0 do
in sert into test values(v1,'abcd'); commit;
SET v1=v1-1;
end while;
END
Call dowhile(10000)
发费时间:0.156秒
Call dowhile_commit(10000)
发费时间:44秒
3. sqlserver:
create table test (a in t,b char(10));
create pro cedure dowhile @in_count int as
begin
declare @v1 int
select @v1= @in_count
while (@v1>0)
begin
insert into test values(@v1,'abcd') select @v1=@v1-1 end
end
create
pro cedure dowhile_commit @in_count int
as
begin
declare @v1 int
select @v1= @in_count
while (@v1>0)
begin
insert into test values(@v1,'abcd')
commit
select @v1=@v1-1
end
end
exec dowhile 10000
发费时间:2秒
Exec dowhile_commit 10000 发费时间:4秒
2.做批量更新
l.oracle
CREATE OR REP LACE P rocedure Dowhile_u(ln_Cou nt Int) As
V1 Int;
Begi n
V1 := ln Cou nt;
While V1 > 0 Loop
Up date test
Set b='frtg'
CREATE OR REP LACE P rocedure Dowhile u commit(In Cou nt Int) As
V1 Int;
Where a=v1;
V1 := V1 - 1;
End Loop;
End;
Begi n
V1 := In Count;
While V1 > 0 Loop
Up date test
Set b='frtg'
Where a=v1;
Commit;
V1 := V1 - 1;
End Loop;
En d;
Exec Dowhile_u(10000)
发费时间:5.641 秒
Exec Dowhile_u_commit(10000)
发费时间:6.125 秒
2.db2
CREATE PROCEDURE YDGFTEST01.DOWHILE U
(
IN IN_COUNT INT) LANGUAGE SQL SP ECIFIC DOWHILE_U BEGIN
DECLARE
v1 INT;
SET v1=in_cou nt;
WHILE v1>0 DO
UPDATE
test
SET
b='frtq'
WHERE
a=v1;
SET v1=v1-1;
END WHILE;
END
CREATE P ROCEDURE YDGFTEST01.DOWHILE_U_commit
(
IN IN_COUNT INT) LANGUAGE SQL SP ECIFIC DOWHILE_U_commit BEGIN
DECLARE
v1 INT;
SET v1=in_count; WHILE v1>0 DO UPDATE
test
SET b='frtq'
WHERE
a=v1;
commit;
SET v1=v1-1;
END WHILE;
END
Call dowhile_u(10000)
发费时间:27.389 秒
Call dowhile_u(10000) 发费时间:46.654 秒
3.sqlserver
create procedure dowhile_u @in_count int
as
begin
declare @v1 int
select @v1=@in_count while (@v1>0)
begin
update test
set b='frtg'
where a=@v1 select @v1=@v1-1 end end
create procedure dowhile_u_commit @in_count int
as
begin
declare @v1 int
select @v1=@in_count while (@v1>0)
begin update test set b='frtg' where a=@v1 commit
select @v1=@v1-1 end
end
Exec Dowhile_u(10000)
发费时间:1分1秒
Exec Dowhile_u_commit(10000)
发费时间:1分14秒
3.做批量删除
1. oracle
CREATE OR REP LACE P rocedure Dowhile D(l n Cou nt Int) As V1 Int;
V1 := In_Cou nt;
While V1 > 0 Loop
Delete From test
Where id=v1;
V1 := V1 - 1;
End Loop;
End;
CREATE OR REP LACE P rocedure Dowhile_D_commit(In_Cou nt Int) As V1 Int;
Beg in
V1 := In_Cou nt;
While V1 > 0 Loop
Delete From test
Where id=v1;
Commit;
V1 := V1 - 1;
End Loop;
End;
Exec dowhile_d(10000)
发费时间3578秒
Exec dowhile_d_commit(10000)
发费时间4032秒
2. db2
CREATE PROCEDURE YDGFTEST01.DOWHILE D
(
IN IN_COUNT INT) LANGUAGE SQL SP ECIFIC DOWHILE_D
BEGIN
DECLARE
v1 INT;
SET v1=in_count;
WHILE v1>0 DO
delete from test
WHERE
id=v1;
SET v1=v1-1;
END WHILE;
END
CREATE PROCEDURE YDGFTEST01.DOWHILE_D_COMMIT
(
IN IN_COUNT INT) LANGUAGE SQL SPECIFIC DOWHILE_D_COMMIT BEGIN
DECLARE
v1 INT;
SET v1=in_count;
WHILE v1>0 DO
delete from test WHERE
id=v1; commit; SET v1=v1-1; END WHILE; END
Call dowhile_d(10000) 发费时间:19.014 秒
Call dowhile_d_commit(10000)
发费时间:45.482 秒
3.sqlserver create procedure dowhile_d @in_count int as begin
declare @v1 int
select @v1=@in_count while (@v1>0)
begin
delete from test where a=@v1 select @v1=@v1-1 end
end create procedure dowhile_d_commit @in_count int as
begin
declare @v1 int
select @v1=@in_count
while (@v1>0)
begin
delete from test where a=@v1 commit select @v1=@v1-1
end
end
Exec dowhile_d 10000 发费时间:1 分31 秒
Exec dowhile_d_commit 10000 发费时间:1 分9 秒。

相关文档
最新文档