HSQLDB 的研究与性能测试(与Mysql对比) 1. HSQLDB 简介 HSQLDB 数据库是一款纯 Java 编写的免费数据库,许可是 BSD-style 的协议。相对其他数据库来说,其体积小,才 563kb 。仅一个 hsqldb.jar 文件就包括了数据库引擎,数据库驱动,还有其他用户界面操作
HSQLDB的研究与性能测试(与Mysql对比)
1.HSQLDB简介
HSQLDB数据库是一款纯Java编写的免费数据库,许可是BSD-style的协议。相对其他数据库来说,其体积小,才563kb。仅一个hsqldb.jar文件就包括了数据库引擎,数据库驱动,还有其他用户界面操作等内容。在Java开源世界里,hsql是极为受欢迎的(就Java本身来说),JBoss应用程序服务器默认也提供了这个数据库引擎。由于其体积小的原因,又是纯Java设计,又支持SQL99,SQL2003大部分的标准,所以也是作为商业应用程序展示的一种选择。
2.HSQLDB的工作模式:
1)In-Process(Standalone)模式
主要是在一个JVM中使用,不能通过网络来访问数据库,数据存储格式为文本文件。
2)Memory-Only单机模式
主要是在一个JVM中使用,不能通过网络来访问数据库,只存储在内存中。
3)Memory-Only网络模式(本机访问)
数据存储在内存中,支持本地访问和网络访问,可应用于多个JVM间进行数据交换。
4)Server模式(本机访问)
类似我们常用的Mysql、oracle等数据库,支持本地访问和网络访问,数据存储格式为文本文件。
5)WebServer模式
和Server运行模式基本一样,只是支持了Http等协议,主要用于防火墙,其余的和Server模式完全一致。
3.测试的SQL语句:
6)CREATE
CREATE TABLE T0(NO INTEGER,a CHAR(20),b CHAR(20),c CHAR(20),d CHAR(20),e CHAR(20),f CHAR(20),g CHAR(20),h
CHAR(20),i CHAR(20),j CHAR(20),k CHAR(20),l CHAR(20),m CHAR(20),n CHAR(20),o CHAR(20),p CHAR(20),q CHAR(20),r CHAR(20),s CHAR(20),t CHAR(20));
7)INSERT
INSERT INTO T0 VALUES (0,'00','01','02','03','04','05','06','07','08','09','010','011','012','013','014','015','016','017','018','019');
8)SELECT
select * from T0;
9)SELECT.all
select a,b,c,d,e from T0
10)SELECT.join
select tmp1.No no1,tmp2.NO no2 from T0 tmp1,T0 tmp2 where (tmp1.NO%5=0) and (tmp2.NO-tmp1.NO)=4;
4.测试数据记录表:
字段个数
测试用例
测试次数(次)
In-Process(Standalone)模式耗时(ms)
Memory-Only单机模式耗时(ms)
Memory-Only网络模式(本机访问)耗时(ms)
Memory-Only网络模式(网络访问)耗时(ms)
Server模式(本机访问)耗时(ms)
Server模式(远程访问)耗时(ms)
Mysql(本机访问)耗时(ms)
Mysql(远程访问)耗时(ms)
21个
CREATE
20次
0
0
0
32
15
16
344
312
INSERT
10000次
984
844
1688
7343
1875
7938
2281
8969
SELECT
5000次
40531
40109
1156859
>20分钟,实在等不下去了
1181094
>20分钟,实在等不下去了
432563
782437
SELECT
1000次
4234
4703
92031
667359
SELECT
100次
468
469
9031
67328
11个
CREATE
20次
0
0
INSERT
10000次
672
576
SELECT
5000次
27641
28672
SELECT
1000次
5个
CREATE TABLE T0(NO INTEGER PRIMARY KEY,a CHAR(20),b CHAR(20),c CHAR(20),d CHAR(20),e
CHAR(20));
20次
0
0
0
312
INSERT INTO T0 VALUES (0,'00','01','02','03','04');
10000次
375
406
1203
1985
select * from T0;
5000次
21968
19860
select * from T0;
1000次
25828
select * from T0;
100次
512
2594
select a,b,c,d,e from T0
5000次
19313
select a,b,c,d,e from T0
100次
391
2266
select tmp1.No no1,tmp2.NO no2 from T0 tmp1,T0 tmp2 where (tmp1.NO%5=0) and (tmp2.NO-tmp1.NO)=4;
100次
不支持%
226047
select tmp1.No no1,tmp2.NO no2 from T0 tmp1 join T0 tmp2 on (tmp2.NO-tmp1.NO)=4;
1次
32062
11219
select tmp1.No no1,tmp2.NO no2 from T0 tmp1 join T0 tmp2 on mod(tmp1.NO,5) = 0 and
(tmp2.NO-tmp1.NO)=4 ;
1次
6360
2078
select tmp1.No no1,tmp2.NO no2 from T0 tmp1 join T0 tmp2 on tmp1.NO>50 and (tmp2.NO-tmp1.NO)=4
;
1次
32063
36031
10000
select No from T0 where mod(NO,5) = 0 ;
100次
1328
688
select No from T0 where NO>50 ;
100次
250
1719
select No from T0 where NO>50 and NO<900;
100次
94
203
delete from T19 where no>=0 and no<=0(为NO创建了索引)
10000次
344
328
1063
1141
1547
delete from T19 where no>=0 and no<=0(没有为NO创建了索引)
10000次
2282
2125
3156
3484
2359
update T19 set a=123 where no>=0 and no<=0(为NO创建了索引)
10000次
1610
750
1515
3078
2218
update T19 set a=123 where no>=0 and no<=0(没有为NO创建了索引)
10000次
4297
2734
3656
5594
2547
21个
CREATE
20次
0
16
31
32
16
16
328
313
INSERT
500次
125
78
172
421
141
734
156
453
SELECT
500次
234
250
8078
17438
10078
18125
1078
3234
16个
CREATE
20次
15
0
16
31
31
16
312
344
INSERT
500次
110
78
156
391
125
122
157
469
SELECT
500次
218
219
5890
13250
6329
13422
859
2515
11个
CREATE
20次
16
0
16
15
0
16
312
328
INSERT
500次
78
79
156
344
109
406
156
453
SELECT
500次
172
203
3469
7391
1985
7438
610
1906
6个
CREATE
20次
0
0
15
15
0
16
312
313
INSERT
500次
78
63
141
329
109
672
156
437
SELECT
500次
141
156
1516
3968
969
3937
469
1407
从上表可见:
1)支持远程访问时,执行CREATE、INSERT语句,HSQLDB明显比MYSQL具有优势。
2)支持远程访问时,执行SELECT查询语句,MYSQL比HSQLDB具有优势。
3)“Memory-Only网络模式”和“Server模式”在效率上差别不明显。
4)“In-Process(Standalone)模式”和“Memory-Only单机模式” 在效率上差别不明显。
5)只允许单机访问时,HSQLDB明显比MYSQL具有明显的优势。(写速度2:1,读速度4:1)
6)HSQLDB对JOIN查询的效率显著不如MYSQL
本文原创发布php中文网,转载请注明出处,感谢您的尊重!