HSQLDB数据库是一款纯Java编写的免费数据库,许可是BSD-style的协议。相对其他数据库来说,其体积小,才563kb。仅一个hsqldb.jar文件就包括了数据库引擎,数据库驱动,还有其他用户界面操作等内容。在Java开源世界里,hsql是极为受欢迎的(就Java本身来说),JBoss应用程序服务器默认也提供了这个数据库引擎。由于其体积小的原因,又是纯Java设计,又支持SQL99,SQL2003大部分的标准,所以也是作为商业应用程序展示的一种选择。
1) In-Process(Standalone)模式
主要是在一个JVM中使用,不能通过网络来访问数据库,数据存储格式为文本文件。
2) Memory-Only 单机模式
主要是在一个JVM中使用,不能通过网络来访问数据库,只存储在内存中。
3) Memory-Only 网络模式(本机访问)
数据存储在内存中,支持本地访问和网络访问,可应用于多个JVM间进行数据交换。
4) Server模式(本机访问)
类似我们常用的Mysql、oracle等数据库,支持本地访问和网络访问,数据存储格式为文本文件。
5) WebServer模式
和Server运行模式基本一样,只是支持了Http等协议,主要用于防火墙,其余的和Server模式完全一致。
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;
字段个数 |
测试用例 |
测试次数(次) |
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 |