之前在论坛看到有人提问,问题如下:
网上有人说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是自动提交的,插入100w数据只提交1次。
这里并不想去刻意比较sql server和oracle在insert数据时哪个更快,而是想说的是:
这种由于无知,而盲目做对比,得到的只能是错误的结论,误导了大家,这是不可取的。