zoukankan      html  css  js  c++  java
  • 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是自动提交的,插入100w数据只提交1次。

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

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

  • 相关阅读:
    多线程——newFixedThreadPool线程池
    mysql SQL优化之嵌套查询-遁地龙卷风
    mysql练习题-查询同时参加计算机和英语考试的学生的信息-遁地龙卷风
    mysql存储过程编写-入门案例-遁地龙卷风
    编程轶事-java中的null-遁地龙卷风
    正逆向思维-编程轶事-遁地龙卷风
    MyBatis处理一行数据-MyBatis使用sum语句报错-MyBatis字段映射-遁地龙卷风
    MyBatis框架在控制台打印Sql语句-遁地龙卷风
    3d转换-正方体-Html5Css3-遁地龙卷风
    突破瓶颈-遁地龙卷风
  • 原文地址:https://www.cnblogs.com/momogua/p/8304384.html
Copyright © 2011-2022 走看看