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

 更新时间:2011年10月18日 10:25:33   作者:  
前几天,苦恼于到底使用哪一种本地数据库来存储部分数据,于是决定做一个数据插入测试进行求证
本地数据库接触不多,最早用过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";
测试结果如下:
数据库类别 插入数量 本地事务(毫秒) 本地无事务(毫秒) 说明
每条记录耗时 每秒插入条数 每条记录耗时 每秒插入条数
Oracle 10000 0.23 4300 0.9 1103 本地数据库
Sqlite 10000 0.0998 10016 6.86 146 本地数据库
MySql 10000 0.2574 3884 4.132 241 本地数据库
Sql Server 10000 0.42 2380 1.52 654 远程数据库
Sql Server 10000 0.413 2418 1.433 697 本地数据库,2CPU,2G内存
代码直接在虚拟机运行
Access2003 10000 0.6 1664 46.87 21.33 本地数据库
Access2007 10000 0.73 1369 47.57 21.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应该是首选。而且在应用中还应该注意,尽可能把数据集中起来进行事务性数据写入,如此可以大大提升该数据库的性能。

相关文章

  • Navicat使用快速入门教程

    Navicat使用快速入门教程

    这篇文章主要介绍了Navicat使用快速入门教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 数据库连接池Druid与Hikari对比详解

    数据库连接池Druid与Hikari对比详解

    这篇文章主要为大家介绍了数据库连接池Druid与Hikari对比详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 记一次SQL优化的实战记录

    记一次SQL优化的实战记录

    作为开发人员,我们免不了与sql打交道,有些sql可能在业务的最开始,执行是毫无问题的,但是随着业务量的提升以及业务复杂度的加 深,可能之前的sql就会需要优化了,下面这篇文章主要给大家介绍了关于一次SQL优化的实战记录,需要的朋友可以参考下
    2022-07-07
  • SQL中一些小巧但常用的关键字小结

    SQL中一些小巧但常用的关键字小结

    这篇文章主要给大家总结介绍了关于SQL中一些小巧但常用的关键字,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • SQL 随机查询 包括(sqlserver,mysql,access等)

    SQL 随机查询 包括(sqlserver,mysql,access等)

    SQL 随机查询 包括(sqlserver,mysql,access等),需要的朋友可以参考下,目的一般是为了随机读取数据库中的记录。
    2009-10-10
  • MySQL与Oracle SQL语言差异比较一览

    MySQL与Oracle SQL语言差异比较一览

    这篇文章主要介绍了MySQL与Oracle SQL语言差异比较一览,需要的朋友可以参考下
    2017-04-04
  • 恢复 SQL 被注入后的数据代码

    恢复 SQL 被注入后的数据代码

    当数据库别批量注入挂马后,需要批量替换掉,可以参考下面的代码。
    2009-02-02
  • sql注入之手工注入示例详解

    sql注入之手工注入示例详解

    之前和大家分享了基本的SQL注入的知识,这一篇讲的就是在得知注入点的之后,如何有效地进行脱裤。文章通过示例介绍的很详细,对大家的理解和学习很有帮助,下面来一起看看吧。
    2016-09-09
  • Select data from an Excel sheet in MSSQL

    Select data from an Excel sheet in MSSQL

    Select data from an Excel sheet in MSSQL...
    2007-06-06
  • Linux下开启和配置OpenGauss数据库远程连接的教程详解

    Linux下开启和配置OpenGauss数据库远程连接的教程详解

    openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行,本文主要为大家介绍了Linux系统中如何开启和配置OpenGauss数据库的远程连接,需要的小伙伴可以参考下
    2023-12-12

最新评论