发表于: 2018-09-18 16:24:34
1 490
今天完成了插入数据
插1w条还好
如果直接插100w条 需要等好久
所以创建了2个for循环
public class InserTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
final String url = "jdbc:mysql://localhost:3306/bm";
final String name = "com.mysql.jdbc.Driver";
final String user = "root";
final String password = "123";
Connection conn = null;
Class.forName(name);//指定连接类型
conn = (Connection) DriverManager.getConnection(url, user, password);//获取连接
if (conn!=null) {
System.out.println("获取连接成功");
insert(conn);
}else {
System.out.println("获取连接失败");
}
}
public static void insert(Connection conn) {
// 开始时间
Long begin =System.currentTimeMillis();
// sql前缀
String prefix = "INSERT INTO xzyuan (name,qq,school) VALUES ";
try {
// 保存sql后缀
StringBuffer suffix = new StringBuffer();
// 设置事务为非自动提交
conn.setAutoCommit(false);
// 比起st,pst会更好些
PreparedStatement pst = (PreparedStatement) conn.prepareStatement("");//准备执行语句
// 外层循环,总提交事务次数
for (int i = 1; i <= 1000; i++) {
// suffix = new StringBuffer();
// 第j次提交步长
for (int j = 1; j <= 1000; j++) {
// 构建SQL后缀
suffix.append("(" +"'dhfg'"+ ",'5646546'"+",'XX大学'" +"),");
}
// 构建完整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 = System.currentTimeMillis();
// 耗时
System.out.println("100万条数据插入花费时间 : " + (end - begin) / 100 + " s");
System.out.println("插入完成");
}
}
这是没有创建索引的情况下
后来试了下1000w条数据
1800s左右
现在开始创建索引
作用
编辑在数据库系统中建立索引主要有以下作用:
(1)快速取数据;
(2)保证数据记录的唯一性;
(3)实现表与表之间的参照完整性;
(4)在使用ORDER by、group by子句进行数据检索时,利用索引可以减少排序和分组的时间。
优缺点
编辑优点
1.大大加快数据的检索速度;
2.创建唯一性索引,保证数据库表中每一行数据的唯一性;
3.加速表和表之间的连接;
4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。
缺点
1.索引需要占物理空间。
2.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。
索引类型
编辑根据数据库的功能,可以在数据库设计器中创建四种索引:普通索引、唯一索引、主键索引和聚集索引。
创建了id索引
可能因为我其他值没有插入 导致看不出来明显变化
接下来是总结
我准备把这么多天来的所学重新回顾一下
评论