本地数据库接触不多,最早用过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应该是首选。而且在应用中还应该注意,尽可能把数据集中起来进行事务性数据写入,如此可以大大提升该数据库的性能。
平时基本使用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应该是首选。而且在应用中还应该注意,尽可能把数据集中起来进行事务性数据写入,如此可以大大提升该数据库的性能。
标签:
数据库,数据插入,性能
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“关于若干数据库数据插入性能的对比分析”评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新动态
2024年11月23日
2024年11月23日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]