批处理的问题

来源:7-3 JDBC批处理

WittChen

2021-05-15 14:41:25

问题描述:

本节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回答

好帮手慕阿园

2021-05-15

同学你好

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

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

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

祝学习愉快~


1

好帮手慕阿园

2021-05-15

同学你好

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

http://img.mukewang.com/climg/5f28cad909caf99409850411.jpg

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

祝学习愉快~

0
hittChen
hp>每创建一次PreparedStatement对象如果就做一次sql解析

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

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

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

h021-05-15
共1条回复

0 学习 · 16556 问题

查看课程