00:00
哎,方式三,那么刚才说来说我们用prepare的STEM不挺好吗?哎,确实挺好的,但是呢,我们还可以呢,再去优化一下,这个优化呢,我们去想谁呢?咱们想着当初讲这个IO流的时候,咱们呢,演示过说一开始咱们读数据呢,用的叫read的方法,空餐的。后来的话呢,我们read的时候呢,是不是有一个BAT数组了,诶相当于我们每次读的时候呢,不用一个一个去读了,我们一次呢,可以读一波数据,减少跟磁盘的IO,哎,这是我们说这个就没有下边这个好,那现在的话呢,虽然说我们用的是prepare statement,但是你是不是还是每。哎,先等一下啊,诶每次呢,我们这个填充完障碍服以后,我们就跟数据库服务器交互了一次,诶然后一共呢交互了2万次,所以呢,有过多的交互,这个时候呢,效率还是不会太高,诶这就我们发现啊,一共是花了80多秒,这个我们写到这儿啊,针对于咱们现在是呃2万条数据,哎,咱们花了这么多秒,哎这这样个情况来这块我们先看一下啊选中啊执行哎确实是2万条数据。
01:12
这个我就没必要select星了啊,看一下说这个两个条数有没有问题,没必要了是吧?哎,好这个呢,回过来,那下边呢,我们刚才提到了啊,说能不能呢,别每次填充完战碍符就执行。啊,你可以攒一攒,攒一波的执行一次,哎,这也是我们现在要说的提升效率的一个方面。啊,所以这块呢,我们要提到了,哎几个操作啊,哎叫爱干。哎,就是几个方法的一个调用,嗯,I的be,然后呢excute哎,Be,哎,然后叫clear,哎,但是那这样几个操作看怎么去用呢?哎,我把这个操作呢,先粘过来,我CTRLC一下哈。这个站到这儿吧。
02:05
诶,这个我叫INSERT2,在这个基础上我们去修改好大家看啊,这个时候呢,我是把战略数填充好了,对吧,填充好以后呢,我们不要马上去执行,嗯,怎么办呢?我这时候呢叫,哎第一个操作咱们称作叫散色扣。攒钱这个攒。哎,攒circle,我们把这个点我们叫ADD bench啊a bench,然后攒攒攒攒到什么时候呢?哎,我们说哎针对于咱们这个数据来讲啊,比如这个I,我们要取模,比如说诶500的时候等等于零,就是攒够500,就类似于我们说那个数组的长度一样哈,哎,攒够500的时候呢,我们就让它执行一次。哎,执行,那我们就点叫CU。哎,SQ的这个半尺,哎,这个是吧,那执行完以后呢,这时我们再来个第三步,第三步呢,我们叫诶清空这个半尺。
03:09
看上面的就是A,执行fe。哎,这个清空呢,就是叫做诶clear这个操作了,哎,这就行,诶每隔500次我们执行一遍,那咱们这一共是2万,哎2万最后一次呢,正好也能出镜是吧。那这不就这样就行,那有的同学可能会想说,万一这要一一万九千九百九十九怎么办呢?那你这块可以再加个if呗,就是对于这种除不进呢,你最后判断也说,你看这个I呢,是不是就是19999,是的话呢,就是最后那一波的话呢,你让他单独的再执行一次,诶他虽然进步到这儿了,让他进到你这个里边就行,对吧?哎,这是个小事啊,哎,我这块呢,正好是配了一下数据保证呢,每一次都能进去了,那那这样就执行了,执完以后呢,最后我们也测试一下这个时间是多少。哎,所以这就我们这个叫哎方式三。但是这个方式三呢,你光这样写是不行的啊,因为默认情况下呢,咱们MYSQL是不支持用bech的。
04:05
那怎么办呢?看课件啊,我们需要再做这样的事儿。这个我们在下边这块啊,诶把这个呢粘过来CTRLC。那我放在这儿了。嗯,就这个啊说呢,我们MYSQL服务器呢,默认情况下呢,它是关闭啊P处理的,或者要不支持P处理的,我们需要呢,设这个参数,让MYSQL呢去启动这个IP处理的操作,那怎么做呢?把这个语句CTRLC放在咱们配置文件URL的后面,诶URL这不是我们这个配置文件吗?URL这块呢,添加一下这个呢是一个问号啊。哎,有点像咱们本身讲那个Java基础的网络编程的时候呢,我们后边这个诶参数,哎问号后边写参数,如果你要还有别的参数的话呢,再用这个语符号去连接就行啊,你看这里边就是rewrite啊去支持我们去读写,但是诶这改成个出,因为它默认的是first加上它,加上它以后呢,不影响我们前面的一些增长,改查操作啊行,这是一个,那还得再做一个事,咱们一开始这个MYSQL呢,它其实确实不支持,呃批量操作在我们这个诶一点,诶咱们导进来,这不是1.7当中是吧,5.1.7当中是不支持的,那么怎么就支持呢?它后来支持了,诶我们这块呢,需要导入一个新的炸包。
05:28
哎,这是我们第三个事啊,需要导入一个新的炸包,这个炸包呢,在给大家发的这个,诶课件资料这块驱动买MYSQ驱动,诶当初我们讲的时候呢,说大家呢,先把这个1.7整过来,诶然后呢,这就是我们为什么要换成1.37啊,就是因为呢,1.7的时候时候是不支持的啊,诶CTRLCL一下,哎,那这时候我们就要做一个替换,替换的时候怎么换呢?顺便我们也说一下这个内容啊,我们先CTRLV整过来了,那我这有俩,那用的是哪个呢?看你把哪个build pass了。
06:02
我们这是不是1.7啊,1.7应该build pass,那我现在是不是要把它去掉,换成它怎么做呢?这样哎,选中工程点右键这块有个build pass,这块有一个叫config啊,Build pass点进来library这块呢,这不就有1.7这个嘛,把它remove掉OK啊,那这个呢,你放这就放这了。啊,也没有关系啊,现在呢,我们就没有我们刚才那个类库了,然后你再把这个呢,做一个build pass。哎,现在呢,我们其实使用的就是它了,嗯,是这样的情况啊,这个呢,其实你也可以把它删掉了,这我就放这了啊,不受影响,你看这块有个标识,就是我们到底是把谁给丢pass了,这块稍微有点不一样啊好,这个三个事做完以后,我们就可以去验证了,那验证之前呢,先把我们这里边这个数据呢做一个清空,清空的话呢,我们就不想让他再可以回滚了,所以直接用cho是吧,诶table,诶故ose。啊,清空了,清空以后呢,我们再做一个select,诶确实没有了,行,在这种情况下,我们现在再演示一个insert好执行,OK。
07:08
好,结束了五六。来565保存一下,来看一下是不是执行两吧。啊,看到这个速度呢,确实有很大的变化,那这时候呢,这个565已经很小了,连一秒都不到啊,那我们下边呢,还想在它上面再去迭代呢,再迭代的话呢,这个数已经很小了,就不足以让我们看出它这个效果了,所以呢改成100万。100万对吧,这个呢,我们上面造这个表,这个长度呢,还是足够的啊,我这个长度是25呢,行,这个时候呢,我是要存这个100万的这个数据了。1234好,这时候我们先回过来,诶把这里边儿的数据呢,也先做一个清空。
08:00
哎,清空以后呢,再查看一下,好保证没有了,然后我们来添加。OK,那这个呢,还是稍微的需要再花一点时间哈。呃,那么在这个基础上我们再去想说还有什么迭代的,还有什么这个优化的空间呢?呃,其实还有啊,16秒是吧,CTRLC一下啊,嗯,这呢我就先放到这了,在这个基础上我们还可以再去优化,这就是我们要说的一个终极方案啊,诶,批量插入的这个方式四。诶方案四这个呢,涉及到就是我们来控制一下这个连接的问题啊,还是我把整个这个操作呢,从这到这来CTRLCL一下。来粘过来,这个我改成是一个三。
09:00
嗯,操作哪块,操作这块啊,大家看,嗯,我们中间这块呢,已经是在展色库了,当然了,大家去控制这个数,其实也可以实现这个效率有点变化对吧,就跟咱们讲那个L流的时候呢,你控制那个字节数组的长度其实也会有一些变化,交互次数多了,交互次数少了,对吧,那这个呢,咱们就不考虑这了啊。那除了这之外呢,还可以做什么呢?关于这个连接。这个连接呢,也是我们下一步再去讲事物的时候呢,要涉及到一个点啊嗯,这个连接的话,我们这呢,相当于是获取了一个数据库连接,获取连接以后,我们在执行这个操作的时候,我执行完了,相当于我们就把很多的这个SQL语句都执行了这个insert了。咱们在当初讲这个数据库的时候呢,提到一个事,就是在演示这个窗K的时候,啊,回忆一下,当时我们说呢,它是叫自动的数据提交的,对吧?哎,所以说我们去roll back的时候呢,它就失效了,那我们再去演示这个delete from的时候,哎,咱不是说这俩的区别吗?对,在演示这个区别的时候呢,我们说,哎说呢,我们是可以让delete from呢去实现数据空回滚的,但是当时这个前提呢,是我们也做了个事,叫set auto commit是不是等于false了,哎,因为默认情况下呢,我们这个DMMR的增删改操作,它也是auto commit是个处的言外D呢,就是我们每执行完一次这个操作,他就提交了一次,默认情况下是这样的,那我们加了这个操作以后呢,就使得他每次执行完以后呢,就不提交了。
10:35
啊是这样的,那回过来那就意味着呢,咱们诶每到500个的时候呢,我们insert一次,那这时候呢,其实它默认的是不是都给提交数据了,哎,那每提交一次的话呢,我们就需要把它写死到这个数据库当中,其实这时候呢,也需要花一些时间,那还可以怎么办呢?诶我们在你获取连接的时候呢,先上来指定呢,先不要着急去提交,诶当我们把这个数据呢都传完以后,你最后的时候再去提交。
11:03
哎,所以这也是我们最后可以再优化的一个空间啊,说设置啊,不允许,哎,自动提交数据是吧?哎,第二我们将set auto commit改成一个false。哎,就不允许它自动提交数据了,那么这时候呢,我们的执行啊,其实呢,相当于是还是给缓存起来了,诶当我们整个把这个执行完以后,诶在这个位置诶我们呢,就统一的去提交数据,诶通过这个连接点,诶我们去做一个他密的操作,哎这时候呢,食材统一的把我们所有的数据呢都给提交了,然后最后呢,我们把资源呢再做一个关闭,哎这样的一个情况,好那回过来,那我们再把这个呢做一个。哎,刚才我们看了这个数据了是吧。100万。这100万数据啊,这个没有问题,然后这块呢,我再给它清掉啊,清掉以后呢,我们再去查看一下,好,这是零了,在这个情况下呢,我们哎做了一个哎赛道的commit等于false,这来一个commit再来。
12:06
哎,这个时间的话呢,就会再少一些啊,哎,可以了。哎,到这儿。哎,原来呢需要16秒,这现在是五秒啊,大概就是1/3的一个时间,这呢就是我们通过来诶设置这个连接,诶这个不允许哎自动提交哎数据,哎这样呢做到的,哎那么关于我们说这个批量操作啊,批量插入这个事,呃,最高效的一个问题,哎就是这样的了,你看我们最后呢,在之前呢,在修改之前,这我们都没有去演示这个statement啊呃,还是用的这个prepared审么的情况下呢,我们插入2万条数据呢,用了80多秒。两条数据一共是80多秒,现在呢,我们插入100万条数据是他的。50倍是吧,50倍的情况下呢,我们这个时间呢,却只有诶五秒多,哎,你可见这个效率是差出来很多了,哎,那大家呢,主要目的也不是说啊,我们下来是不是非得大家写你也知道呢,我们这里边怎么去做的这个事儿啊,然后呢,每次每隔一波我们去做一次执行,然后呢,关于这个连接的一个呃,设置它不允许自动提交和允许它自动提交的问题,这个事呢,也是在我们下一个要讲的知识叫做数据库事务当中啊有所体现,这个呢也是我们要讲解的一个重点。
我来说两句