关于若干数据库数据插入性能的对比

      前几天,苦恼于到底使用哪一种本地数据库来存储部分数据,于是决定做一个数据插入测试进行求证。
      本地数据库接触不多,最早用过Access,但现在SQLite功能更加强大--而且,说实在的我不喜欢Access,连带着不喜欢SqlServer,只要一看到满眼的@号go号我就头晕不止;更何况有一个我感觉非常致命的问题:分页太麻烦!远不如mySql/SQLite中的limit或者Oracle中的rownum来得痛快。
      平时基本使用Oracle,对它的性能知根知底了;mySql近年来混得风生水起,想必有过人之处,也一并纳入测试范围了。
      另外,Access现在有2007版,不知道和2003版在性能上有什么区别没有?特意分开进行测试。

测试环境如下:
      服务器:本机(笔记本,I3 370,8G内存)
      操作系统:windows 7 x64
      语言环境:C#,使用控制台程序测试。
      虚拟机:安装SqlServer2008,2CPU,3G内存。
      数据库:Oracle11g(本机数据库)
            SQLite(本机文件)
            MySql(版本5的绿色版)
            SqlServer(不想在本机安装2008版本,本来想使用本机的学习版,但死活不行,只好在本机虚拟机上安装一个2008版本,测试性能有所下降,但也只好如此了)
            Access(2003版)
            Access(2007版)
      测试方法:先生成10000条记录(每条记录6个字段),插入数据前先清除原有数据;
      数据插入分为事务性写入(启动事务,逐条插入后提交)及非事务性写入(不启动事务,逐条插入)。
      SqlServer数据库在本地虚拟机的数据库中,数据不太准确;为消除网络操作影响,将代码移到虚拟中直接执行一次。

测试过程中发现了若干有趣的问题:
      1.64位操作系统下,Access无法在编译为AnyCpu的程序下执行,必须编译为x86方可正常操作。(如果是网站,必须将池设置为启用32位兼容)
      2.SQLite有64位版本的DLL,可以正常在64位环境(控制台程序)下运行;但很奇怪的是,如果是网站,则使用64位DLL反而无法正常运行,必须使用32位版本的DLL,并且将IIS的池设置为启用32位兼容才可正常运行。
      3.Access的2003版本与2007版本的数据库连接串是不相同的,如下:
        2003:@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\xxx\test.mdb";
        2007:@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\xxx\test.accdb";
测试结果如下:

数据库类别插入数量本地事务(毫秒)本地无事务(毫秒)说明
每条记录耗时每秒插入条数每条记录耗时每秒插入条数
Oracle100000.2343000.91103本地数据库
Sqlite100000.0998100166.86146本地数据库
MySql100000.257438844.132241本地数据库
Sql Server100000.4223801.52654远程数据库
Sql Server100000.41324181.433697本地数据库,2CPU,2G内存
代码直接在虚拟机运行
Access2003100000.6166446.8721.33本地数据库
Access2007100000.73136947.5721.02本地数据库

结果很有意思:
      1.SQLite的事务插入速度最快,达到10000条每秒,但非事务性的插入速度就一般了。
      2.Oracle作为数据库的老大,事务插入速度仅次于SQLite,但非事务性的插入速度居首。
      3.可怜Access,不试不知道,一试吓一跳,事务插入最慢,非事务插入更慢;本来对Access2007还有点期待的,没想到它比2003版本的数据还差。
      4.mySql还真是不赖,事务插入的性能仅次于Oracle,非事务性的插入没有那么强,但也还不错。
      从数据来看,发觉一个比较有规律的现象:大型数据库与小型数据库、本地型数据库的区别,不在于事务性插入性能的高低,而在于非事务性插入性能的高低。Oracle最强,每秒达到1000条以上;其次是SqlServer,也有700条每秒;mySql相比之下就差多了,只达到240条每秒左右,这个性能整整差了一个等级;比较意外的是SQLite,非事务性插入性能虽然比mySql差一点,但也相差不大(不是数量级的差别);最糟糕的是Access,非事务数据插入性能惨不忍睹,和SQLite相比,整整差了一个数量级。

      由上可见,如果选择本地数据库,SQLite应该是首选。而且在应用中还应该注意,尽可能把数据集中起来进行事务性数据写入,如此可以大大提升该数据库的性能。

 

转载于:https://www.cnblogs.com/hchxxzx/archive/2011/10/17/2215797.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值