sql优化:SQL Server与Oracle性能对比(插入100w条数据时)

 

之前在论坛看到有人提问,问题如下:

      网上有人说oracle 写入数据速率约为sqlserver的7.5倍,但我测试的结果刚好相反             http://bbs.csdn.net/topics/390962652

 

于是,在网上找了一下,确实有如下标题的文章:

      oracle 写入数据速率约为sqlserver的7.5倍

比如,这篇:大数据量测试比较oracle与sql server性能

http://wenku.baidu.com/link?url=eQdyL2WIW_kkAeJZMSHpXCO4DXNJZt2-f00qdiLLZrdV6qJWWHY2ZlCInKL3fGM4nEokMpUAQKjE8n72ekQy8HKNQXzB3-rbLyQVV4V5kTG

 

这篇文章写了一段循环insert的代码,然后分别在sql server和oracle上运行,通过代码运行的时间来对比,得出的结论如下:

上面文章的结论很明显:oracle 写入数据速率约为sqlserver的7.5倍。

 

就像在论坛中提出的问题一样,我也对这个结论产生了疑惑,于是我做了实验来说明这个这个结论是错误的。

 

1、机器配置

 

2、数据库

在这台机器上,安装了SQL Server 2012、Oracle 11g。

版本号分别是:

Microsoft SQL Server 2012 - 11.0.2100.60 (X64) 
Feb 10 2012 19:39:15 
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

 

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

3、代码

SQL Server的代码:

 

drop table tblTestX;

CREATE TABLE tblTestX ( iID int, strData char(10))
go
SET NOCOUNT ON
go

declare @a int;

set @a = 1;

begin tran
WHILE @a <= 1000000 
begin
     INSERT INTO tblTestX VALUES (@a,'Test');
	 set @a = @a + 1; 
end
commit


运行结果:

 

 

Oracle的代码:

 

create table tblTstX(id integer, test char(10));   

declare a integer;
begin   
for a in 1..1000000 loop
insert into tblTstX values(a,'mytest');
end loop;
commit;
end;


运行结果:

 

 

 

4、SQL Server与Oracle在插入100w条数据时,运行时间对比

   从上面的截图可以看出SQL Server为9秒,Oracle为48秒,SQL Server比Oracle快了5倍。

 

为什么我的实验结果和那篇文章作者的实验结果完全相反呢?

其实主要在与那位作者不了解sql server和oracle的不同,sql server在默认的情况下,是每个语句都自动提交的,这样100w条数据,就提交了100w次,虽然每次提交消耗的时间很少,但是乘上100w次,那就是非常大的时间了,速度自然就慢了。

而oracle是隐式事务(不用像sql server那样写 begin tran来显式的开启事务),也就是一堆的sql都在一个事务里,直到手动commit或者rollback来提交,所以,插入100w数据只提交1次。

这里并不想去刻意比较sql server和oracle在insert数据时哪个更快,而是想说的是:

这种由于无知,而盲目做对比,得到的只能是错误的结论,误导了大家,这是不可取的。

一般的公司通常会在他们的信息系统架构中引入多种数据库平台,同引入三到四种不同的RDBMS览决方案的中大型公司 也并丌少见,当然返些公司里面的DBA们通常也需要 同拥有管理多种丌同平台的技能了。 叧在一种平台上展开工作的数据库与家们也通常会期待着在他们的下一仹工作中能学到点不一样的东西,那些有勇气的人们则愿意花间、金钱和精力去学习 新的东西,也有其他因为换了新公司戒者是为了找新的工作而去学习新的系统的人们,毋庸置疑的一点就是公司老板和人力与家们会更加青睐亍那些拥有多个领域经 验的求职者。 依我个人的经验来看,在学习一个新的数据平台的候,最好的方法就是在新的环境中去収现那些你已知的东西,返样学习起来会简单徆多。当然,当中也会 遇到一些全新的概念需要去学习,戒者是忘掉一些你现在已知的概念,但不管怎举说你丌是从零开始的。比如说一个做SQL Server开収人员在要写Oracle存储过程的候可能会先去找那些内置的函数然后比较它们之间不同点,她也可能会去比较发量声明以及错误处理的异同。 本系列文章中我将尝试对Microsoft SQL ServerOracle RDBMS(以10g及以后的版本为主)进行一个深入的比较。我会主要集中亍返两种数据库乀间架构上的比较,当然不要期望我会给你一个详尽的比较清单,但是我会尽我所能的让你看清返两种当今世上应用最广的数据库之间的相同和相异乀处。本文是以一个SQL Server DBA的觇度去构思和写作的,不过相信返对Oracle与家门了览SQL Server返一面也是徆有参考价值的。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值