发表于: 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索引


可能因为我其他值没有插入 导致看不出来明显变化


接下来是总结

我准备把这么多天来的所学重新回顾一下







返回列表 返回列表
评论

    分享到