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

所属分类: 数据库 / 数据库其它 阅读数: 136
收藏 0 赞 0 分享
本地数据库接触不多,最早用过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应该是首选。而且在应用中还应该注意,尽可能把数据集中起来进行事务性数据写入,如此可以大大提升该数据库的性能。
更多精彩内容其他人还在看

sql 左连接和右连接的使用技巧(left join and right join)

今天做项目,发现左右连接是不一样的。主要是说明了区别,是不是必须用左连接或右连接,大家可以根据需要选择。
收藏 0 赞 0 分享

mysql "group by"与"order by"的研究--分类中最新的内容

这两天让一个数据查询难了。主要是对group by 理解的不够深入。才出现这样的情况
收藏 0 赞 0 分享

MSSQL转MySQL数据库的实际操作记录

今天把一个MSSQL的数据库转成MySQL,在没有转换工具的情况下,对于字段不多的数据表我用了如下手功转换的方法,还算方便。MSSQL使用企业管理器操作,MySQL用phpmyadmin操作。
收藏 0 赞 0 分享

程序员应该知道的数据库设计的两个误区

在几乎所有的企业级应用程序中,包括各种MIS、ERP、CRM等等,都会使用数据库,这样的好处是显而易见的,很容易地实现了数据层和业务逻辑层的分离,而且对于性能的优化也在一定程度上提供了便利。
收藏 0 赞 0 分享

大数据量,海量数据处理方法总结

大数据量的问题是很多面试笔试中经常出现的问题,比如baidu google 腾讯这样的一些涉及到海量数据的公司经常会问到。
收藏 0 赞 0 分享

MDAC2.8 安装问题与解决方法

根据Windows XP的版本不同,有的版本需要安装MDAC2.8,一般Windows XP SP2或以上版本就不需要安装。不需要安装时系统会提示“MDAC 2.8 RTM 与此版本 Windows 不兼容。现在它的所有功能都成为 Windows 的一部分”。
收藏 0 赞 0 分享

SQLServer 2005 和Oracle 语法的一点差异小结

Microsoft SQL Server 和Oracle 语法的一点差异小结,需要的朋友可以参考下。
收藏 0 赞 0 分享

数据库设计规范化的五个要求 推荐收藏

通常情况下,可以从两个方面来判断数据库是否设计的比较规范。一是看看是否拥有大量的窄表,二是宽表的数量是否足够的少。
收藏 0 赞 0 分享

数据库为何要建立索引的原因说明

数据库索引是为了增加查询速度而对表字段附加的一种标识。见过很多人机械的理解索引的概念,认为增加索引只有好处没有坏处。
收藏 0 赞 0 分享

数据库测试 实用技巧及测试方法

软件应用程序已经离不开数据库。无论是在Web、桌面应用、客户端服务器、企业和个人业务,都需要数据库在后端操作。
收藏 0 赞 0 分享
查看更多