您的位置:首页 > 数据库 > Oracle

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

2016-12-24 23:28 686 查看
之前在论坛看到有人提问,问题如下:

      网上有人说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数据时哪个更快,而是想说的是:

这种由于无知,而盲目做对比,得到的只能是错误的结论,误导了大家,这是不可取的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: