4.测试数据
4张表,每张100万条数据
生成数据的代码片段为
String sql = "insert into t_main(rec_id,c1,c2,c3,c4,c5,c6) values( , , , , , , )";
PreparedStatement st1 = conn.prepareStatement(sql);
sql = "insert into t_rel1(rec_id,main_id,c1,c2,c3,c4,c5,c6) values( , , , , , , , )";
PreparedStatement st2 = conn.prepareStatement(sql);
sql = "insert into t_rel2(rec_id,main_id,c1,c2,c3,c4,c5,c6) values( , , , , , , , )";
PreparedStatement st3 = conn.prepareStatement(sql);
sql = "insert into t_rel3(rec_id,main_id,c1,c2,c3,c4,c5,c6) values( , , , , , , , )";
PreparedStatement st4 = conn.prepareStatement(sql);
long a = System.currentTimeMillis();
for (int i = 1; i <= count; i++) {
st1.setLong(1, i);
st1.setDouble(2, i * 0.1);
st1.setLong(3, i * 2);
st1.setString(4, "c3_" + i);
st1.setString(5, "c4_" + i);
st1.setString(6, "c5_" + i);
st1.setString(7, "c6_" + i);
st1.executeUpdate();
st2.setLong(1, i);
st2.setLong(2, i);
st2.setDouble(3, i * 0.2);
st2.setLong(4, i * 3);
st2.setString(5, "c3_" + i);
st2.setString(6, "c4_" + i);
st2.setString(7, "c5_" + i);
st2.setString(8, "c6_" + i);
st2.executeUpdate();
st3.setLong(1, i);
st3.setLong(2, i);
st3.setDouble(3, i * 0.3);
st3.setLong(4, i * 4);
st3.setString(5, "c3_" + i);
st3.setString(6, "c4_" + i);
st3.setString(7, "c5_" + i);
st3.setString(8, "c6_" + i);
st3.executeUpdate();
st4.setLong(1, i);
st4.setLong(2, i);
st4.setDouble(3, i * 0.4);
st4.setLong(4, i * 5);
st4.setString(5, "c3_" + i);
st4.setString(6, "c4_" + i);
st4.setString(7, "c5_" + i);
st4.setString(8, "c6_" + i);
st4.executeUpdate();
}
5.测试结果
4张表,每张插入100万数据,消耗时间对比
单位:毫秒
| MemSQL | SQLFire | Oracle |
| 624765 | 196140 | 1289811 |
以下为查询测试,均执行10次求得平均消耗时间(不包含首次执行)
单位:毫秒
查询测试一:单表整型字段比较
select count(*) from t_main where c2>1000;
| MemSQL | SQLFire | Oracle |
| 21 | 675 | 58 |
查询测试二:单表like
select count(*) from t_main where c4 like '%c%';
| MemSQL | SQLFire | Oracle |
| 41 | 875 | 13 |
查询测试三:多表关联浮点数sum
select sum(m.c1+r1.c1+r2.c1+r3.c1) "rt" from t_main m,t_rel1 r1,t_rel2 r2,t_rel3 r3 where m.rec_id=r1.main_id and m.rec_id=r2.main_id and m.rec_id=r3.main_id;
| MemSQL | SQLFire | Oracle |
| 1365 | 14640 | 2077 |
查询测试四:多表关联整型sum
select sum(m.c2+r1.c2+r2.c2+r3.c2) "rt" from t_main m,t_rel1 r1,t_rel2 r2,t_rel3 r3 where m.rec_id=r1.main_id and m.rec_id=r2.main_id and m.rec_id=r3.main_id;
| MemSQL | SQLFire | Oracle |
| 1360 | 10257 | 2084 |
6.总结
测试过程中CPU、内存使用均未超过50%
插入性能SQLFire最高,MemSQL其次,Oracle最慢,MemSQL效率约是Oracle的两倍
查询性能MemSQL最高,Oracle其次,SQLFire最慢(慢的出奇。。。),MemSQL效率约是Oracle的两倍
不知道怎样的环境能测出30倍性能的提升。。。