5000 take 656.
...............
50000 take 5172.
55000 take 5844.
60000 take 6531.
65000 take 7203.
70000 take 7672.
75000 take 8187.
80000 take 8781.
85000 take 9234.
90000 take 9969.
95000 take 10640.
100000 take 11375
....
200000 take 24469.
.................
500000 take 73156.
505000 take 74265.
510000 take 75172.
..................
1000000 take 184719.
1005000 take 186047.
1010000 take 187359.
..................
2000000 take 538422.
2005000 take 540250.
2010000 take 543125.
....................
3000000 take 1061750.
3005000 take 1064187.
3010000 take 1068187.
...................
3750000 take 1583109.
....................
以前测试如果是设成开发机环境,到10w数据就不行,看来内存对数据库的性能影响极大。
如果是在真的服务器环境(例如4 cpu, 8G内存,给mysql 设4G内存)估计到后面的出入速度也不会什么大的下降)
下面是表的结构:
stmt.execute("CREATE TABLE account" +
" (AC_id int(10) unsigned NOT NULL auto_increment," +
" AC_firstName varchar(45) NOT NULL,`AC_middleName` " +
"varchar(45) default NULL," + "AC_lastName varchar(45) NOT NULL," +
"AC_authName varchar(45) NOT NULL," +
"AC_authPassword varchar(45) NOT NULL," +
"AC_emailAddress varchar(45) default NULL," +
"AC_birthDay timestamp default '2007-04-24 20:55:22.468'," +
"AC_isClosed tinyint(1) default 0," + "PRIMARY KEY (AC_id)," +
"UNIQUE KEY AC_authName (AC_authName))" +
" ENGINE=InnoDB DEFAULT CHARSET=utf8;");
测试函数:
public static void importHugeAccountData(int number)
throws Exception {
Connection conn = getConnection();
Statement stmt = conn.createStatement();
stmt.execute("Delete from Account where AC_id > 100");
long startTime = System.currentTimeMillis();
for (int i = 0; i < (number / 1000); i++) {
StringBuffer sql = new StringBuffer();
sql.append(
"insert into account(AC_authName, AC_authPassword, AC_firstName, AC_lastName) values ");
for (int j = 0; j < 1000; j++) {
sql.append(("(\"" + UUID.randomUUID().toString() + "\", \"" +
UUID.randomUUID().toString() + "\", \"" +
UUID.randomUUID().toString() + "\", \"" +
UUID.randomUUID().toString() + "\"), "));
}
sql.delete(sql.length() - 2, sql.length() - 1);
stmt.execute(sql.toString());
if ((i % 5) == 0) {
System.out.println((i * 1000) + " take " +
(System.currentTimeMillis() - startTime) + ". ");
}
}
long time = System.currentTimeMillis() - startTime;
System.out.println(time);
}
这里有一个别人做的测试
http://jimcgnu.iteye.com/blog/56550
有谁知道在其它数据库上(oracle, sql server)做的测试性能怎样?