public static void insert() {
// 开时时间
Long begin = new Date().getTime()
// sql前缀
String prefix = "INSERT INTO tb_big_data (count, create_time, random) VALUES "
try {
// 保存sql后缀
StringBuffer suffix = new StringBuffer()
// 设置事务为非自动提交
conn.setAutoCommit(false)
// Statement st = conn.createStatement()
// 比起st,pst会更好些
PreparedStatement pst = conn.prepareStatement("")
// 外层循环,总提交事务次数
for (int i = 1 i <= 100 i++) {
// 第次提交步长
for (int j = 1 j <= 10000 j++) {
// 构建sql后缀
suffix.append("(" + j * i + ", SYSDATE(), " + i * j
* Math.random() + "),")
}
// 构建完整sql
String sql = prefix + suffix.substring(0, suffix.length() - 1)
// 添加执行sql
pst.addBatch(sql)
// 执行 *** 作
pst.executeBatch()
// 提交事务
conn.commit()
// 清空上一次添加的数据
suffix = new StringBuffer()
}
// 头等连接
pst.close()
conn.close()
} catch (SQLException e) {
e.printStackTrace()
}
// 结束时间
Long end = new Date().getTime()
// 耗时
System.out.println("cast : " + (end - begin) / 1000 + " ms")
}
导入时把生成索引给关掉,应该能快一点.不要一边导入一边建立索引.
8G数据,应该也不那么慢了.
把sql语句文件读取出一部分看看,建表语句中,应当有建立索引的部分,删掉它!
只做建表和插入数据两件事.
还有,看看数据库有没有外键?
尽量在插入数据过程中去掉外键关联.
等数据插入完成之后再加索引和外键,应该能提高很多读写性能.
截取一部分数据,例如100Mb.
插入一下试试,可以预先对整体时间有一个预期.
还有,真的要弄台好点的电脑,或者去借一台,等把数据导入完成之后,把msyql的库文件直接复制出来放自己机器上跑就好.
emm..
再追加点信息,要先搞明白,sql原文件里,到底都执行了哪几类 *** 作?
可能需要你用c之类写点小工具,或者别的什么语言,分块读取并处理文件.
8G..
嗯,还好.
现在内存都够大,否则你都没法直接用软件打开了.
只有8G也可以直接用软件打开看.
停掉索引真的可以大幅度加快插入数据的速度.
建议试一试!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)