发表于: 2018-03-18 22:27:37

1 461


今天完成的事情:

好吧,今天把任务的第27步做完了

做了多次试验

第一次,单条数据插入,插入1w条数据,有索引和没有索引各插入了一次,

有索引的时候平均一秒12条数据,没有索引的时候平均一秒11

第二次,批量数据插入,因为mybatis的批量插入没弄好,报了好多次BindingException错误

进行了几次10条数据插入,没有索引,总用时分别是18秒,4秒,22秒

第三次,批量数据插入,插入1w条数据,没有索引,分别是28秒和5.9秒

第四次,批量数据插入,插入100w条数据,有索引的情况下176秒,没有索引是163秒

第五次,本地测试批量插入100w数据,有索引的情况下98秒,没有索引42秒

结论:

首先,倒着看,本地插入数据的时候,没有索引的情况下比有索引的情况要快一倍,

再看远程连接的时候,可以看到每次的速度波动都非常大,应该是本地与远程服务器连接的波动太大(免费的服务器....).

印证了mysql的索引是影响插入效率的,但是索引却能够加快查找的速度,在之前的日报中提到(有索引查询本地1000w数据时是0.01秒,没有索引12秒)


遇到的问题:

今天遇到十分多的问题,有编写错误的,有内存爆掉的

首先说BindingException错误,这个是在编写mybatis批量插入的时候出现的问题,这个其实是粗心大意犯下的(学得也不够全面)

首先看看正确的代码

在看看错误的代码

很容易发现,是因为漏了item.当然,parameterType和Collection也是非常重要,这两个属性写错了同样会导致BindingException错误


第二个是内存爆掉  java.lang.OutOfMemoryError

一开始写的循环是循环添加100w个学生信息,再批量提交,运行了两遍都是内存溢出.

后来做了两个循环,循环一万条数据提交一次,循环100次,同样是插入100万的数据,但是就不会再出现内存溢出了.

收获:

虽然是用Spring+mybatis来写的dao,但是今天主要的操作是mybatis,所以说是对mybatis的使用更加了解了,

以及,索引的原理理解更深刻:建立索引相当于mysql自建一张索引表,所以插入的时候有索引的话就等于在插入两张表,所以会比没有索引的时候要慢许多,

但是查询的时候却会快很多,因为可以直接搜索引表,搜该条数据再链原来的表中获得数据,就不用整个表去查找数据,大量数据的时候速度就会明显不一样

明天计划的事情:

1.测试一下连接DB中断后TryCatch是否能正常处理。

2.测试一下不关闭连接池的时候,在Main函数里写1000个循环调用会出现什么情况。

3.添加数据返回ID,删除或更新数据返回True/False

然后整理下思路,因为从17步起,好像把任务步骤乱了,所以理清自己对哪些步骤已经彻底完成,哪些还需要完善,哪些还没动手


返回列表 返回列表
评论

    分享到