批处理的问题

批处理的问题

问题描述:

本节2:00之后和9:00之后这段讲解和3-5节讲解PreparedStatememnt高效已经自相矛盾了,

本节讲每次循环需要解析一次sql语句而3-5讲解的是如果使用PreparedStatement相同sql类型的sql语句只需要解析一次就行了,因此个人感觉这里有点问题。

尝试过的解决方式:

前面老师讲过PreparedStatement可以使数据库把这种sql语句保存到内存里,因此,只要是相同类型的sql语句过来MySQL都不需要解析直接执行就可以,这很高效,只是第一次执行的时候耗时而已;而本节2分钟开始和9分钟开始的这段针对于循环的这段讲解我认为是错误的

1、错误在老师讲解每一次循环需要解析一次sql语句,事实上只会解析一次

而快得这6秒钟时间是快在

1、我只需要创建一次对象,因为创建对象也是耗资源的事情,循环中创建里了10W次对象

2、在pstmt.excuteUpdate(),每一次循环都要执行一次写操作,即使不是写在真正的表中但是也是写在事务区中,那也是耗费资源的,这里写了10W次毫无疑问也是费时的

以上是我的个人理解,如有错误希望老师指正

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好

1、使用PreparedStatement向数据库发送sql语句时,会先解析sql语句,然后MySQL数据库会把编译解析好的sql语句存到内存里,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中;3-5课程的原理也是如此

2、在循环外面该sql只会被解析一次

3、如果是在循环中,PreparedStatement每创建一次都会解析一次sql;是mysql内存中有编译好的sql,但是PreparedStatement并不会知道mysql内存中有,所以向mysql发送数据时还是会再次进行解析的,解析sql语句也是会耗费资源的

祝学习愉快~


好帮手慕阿园 2021-05-15 17:55:19

同学你好

1、在该视频的2分左右老师讲的是每创建一次对象需要对sql语句做一次解析;这里创建对象的语句是在for循环中,每次循环中的内容执行一遍后,就创建一个新的pstmt,执行一次excuteUpdate();而之前是只创建一次pstmt对象即可,所以并不矛盾

http://img1.sycdn.imooc.com//climg/5f28cad909caf99409850411.jpg

2、同学下面的理解也是正确的,创建对象也是会消耗资源的,调用pstmt.excuteUpdate()也是会消耗资源的

祝学习愉快~

  • 提问者 WittChen #1

    每创建一次PreparedStatement对象如果就做一次sql解析

    1、老师您回答3-5小结的PreparedStatement高效在哪里?反正我每次执行都需要解析,谈何高效?

    2、如果这是一个接口的查询,即使我下载循环外面,那每发起一次请求就要解析一边,这明显是不合理的

    3、我不了解MySQL的底层,但是既然已经把相同类型的sql语句编译好存在内存中了,我每次执行已经存在的内存中编译好的sql语句还要解析,这明显不合理

    2021-05-15 18:06:20
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师