`

理解mysql_批量执行的性能优化

阅读更多
MySQL Jdbc驱动在默认情况下会无视executeBatch()语句,把我们期望批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,直接造成较低的性能。

只有把rewriteBatchedStatements参数置为true, 驱动才会帮你批量执行SQL (jdbc:mysql://ip:port/db?rewriteBatchedStatements=true)。不过,驱动具体是怎么样批量执行的? 你是不是需要看一下内幕,才敢放心地使用这个选项? 下文会给出答案。

另外,有人说rewriteBatchedStatements只对INSERT有效,有人说它对UPDATE/DELETE也有效。为此我做了一些实验(详见下文),结论是: 这个选项对INSERT/UPDATE/DELETE都有效,只不过对INSERT它为会预先重排一下SQL语句。


注:本文使用的mysql驱动版本是5.1.12


实验记录:未打开rewriteBatchedStatements时
未打开rewriteBatchedStatements时,根据wireshark嗅探出的mysql报文可以看出,
batchDelete(10条记录)  =>  发送10次delete 请求
batchUpdate(10条记录)  =>  发送10次update 请求
batchInsert(10条记录)  =>  发送10次insert 请求

也就是说,batchXXX()的确不起作用

实验记录:打开了rewriteBatchedStatements后
打开rewriteBatchedStatements后,根据wireshark嗅探出的mysql报文可以看出

batchDelete(10条记录)  =>  发送一次请求,内容为”delete from t where id = 1; delete from t where id = 2; delete from t where id = 3; ….”
batchUpdate(10条记录)  =>  发送一次请求,内容为”update t set … where id = 1; update t set … where id = 2; update t set … where id = 3 …”
batchInsert(10条记录)  =>   发送一次请求,内容为”insert into t (…) values (…) , (…), (…)”

对delete和update,驱动所做的事就是把多条sql语句累积起来再一次性发出去;而对于insert,驱动则会把多条sql语句重写成一条风格很酷的sql语句,然后再发出去。官方文档说,这种insert写法可以提高性能(”This is considerably faster (many times faster in some cases) than using separate single-row INSERT statements”)

一个注意事项
需要注意的是,即使rewriteBatchedStatements=true, batchDelete()和batchUpdate()也不一定会走批量: 当batchSize <= 3时,驱动会宁愿一条一条地执行SQL。所以,如果你想验证rewriteBatchedStatements在你的系统里是否已经生效,记得要使用较大的batch.
分享到:
评论

相关推荐

    mysql_批量数据脚本..

    8. **性能优化**:通过合理设置索引、调整批处理大小、使用批量操作等方式优化脚本性能。 9. **备份与恢复**:在执行批量操作前,通常需要对数据库进行备份,以防万一出现问题可以恢复。 10. **脚本自动化**:使用...

    Navicat100_mysql_en

    4. 批量操作:提供批量执行SQL脚本的能力,极大地提高了工作效率。 5. 数据同步向导:通过向导引导,简化了数据同步过程,减少了手动操作的复杂性。 6. 数据同步报告:在同步前后生成详细报告,帮助用户了解数据库...

    Mysql_Optimizationl.rar_mysql 优化

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,其性能优化对于任何依赖于它的应用程序至关重要。本教程“Mysql_Optimizationl.rar”聚焦于MySQL的性能提升,涵盖了执行优化、运维策略以及架构设计等多个方面。...

    php_mysql_class.zip_MYSQL_class_php_php class_php+mysql

    8. **性能优化**:可能包含缓存查询结果、批量操作等特性,以提高性能。 在实际应用中,开发者可以通过实例化此类,然后调用其方法来完成数据库操作,例如: ```php $db = new MYSQL_class(); $db-&gt;connect('...

    Navicat_for_MySQL_10.0.11.0

    4. **性能优化** Navicat for MySQL 10.0.11.0版在性能上进行了优化,提供更快的数据处理速度,同时支持多线程,使得大规模数据操作更加流畅。 5. **安全性** 提供SSL加密连接,确保数据在传输过程中的安全性,...

    MySQL架构演变与性能优化最终版

    理解MySQL的基本架构对于深入掌握其工作原理至关重要。 **1.1 MySQL架构图** - **客户端/服务端模型**:MySQL采用典型的客户端/服务端架构。客户端通过网络与MySQL服务端通信,执行查询操作。 - **连接管理器**:...

    mysql性能优化

    使用`EXPLAIN`来分析查询计划,理解MySQL如何执行查询并找出潜在问题。 3. **查询缓存**:启用查询缓存可以提高经常执行的相同查询的响应时间,但需要注意缓存的更新维护,因为它可能在大量写操作时反而降低性能。 ...

    excel_to_mysql.rar_excel mysql_excel to mysql php_mysql to exce

    在IT领域,数据管理和处理是至关重要的任务,而Excel和MySQL是两个常用的数据管理工具。Excel是一款强大的电子...在实际应用中,你可能还需要考虑错误处理、数据验证和性能优化等方面,以确保整个流程的稳定性和效率。

    MySQL大并发量性能优化实战

    MySQL大并发量性能优化实战是数据库管理领域中的一个重要主题,特别是在高访问量的互联网应用中。MySQL作为广泛应用的关系型数据库管理系统,其性能优化对于提升系统整体效率至关重要。本篇文章将深入探讨在面对大...

    Windows平台C连接MySQL数据库

    在Windows平台上,使用C语言连接MySQL数据库是一项常见的任务,尤其对于系统级开发或者需要底层控制的应用来说。...通过实践和调试,可以更深入地理解MySQL的C API,从而实现复杂的数据操作和管理。

    navicat8_mysql

    5. 实时监控:能实时监控数据库性能,展示服务器状态,如CPU使用率、内存占用、连接数等,帮助优化数据库性能。 6. 定时任务:支持设置定时任务,如定期备份、数据同步、SQL脚本执行等,确保数据库的安全和稳定。 ...

    mysql教程PPT.zip_MYSQL_MYSQL ppt_教程

    14. 性能优化: - 查询优化:分析执行计划,避免全表扫描,合理设计索引。 - 表设计:适当的数据类型,正常化设计减少冗余。 通过这份PPT教程,你将能够了解MySQL的基础知识,逐步掌握数据库的日常管理和维护。...

    从以下维度进行MySQL性能优化所谓的性能优化

    3. **优化JOIN操作**:尽量减少JOIN的数量,优化JOIN条件,使用EXPLAIN预览查询计划,理解MySQL如何执行JOIN操作。 4. **避免子查询**:尽可能将子查询替换为JOIN操作,或者利用临时表来存储子查询结果。 二、...

    mysql性能优化PHP高级开发工程师架构设计

    在PHP高级开发工程师的工作中,深入理解并掌握MySQL的性能优化技巧,能够显著提高应用程序的响应速度和用户体验。架构设计在此过程中也起到至关重要的作用,良好的架构可以预先避免性能瓶颈,为系统扩展性和稳定性...

    一堂课带你精通~MySql性能优化实战

    通过对MySQL的性能优化学习,我们可以了解到优化MySQL不仅涉及到具体的SQL语句和数据库配置,还需要深入理解系统架构以及业务场景的特点。在实际工作中,结合具体情况进行综合考量是非常必要的。此外,持续学习最新...

    mysql性能优化篇-自己的理解

    根据给定文件的信息,我们可以提炼出关于MySQL性能优化的关键知识点,并进行详细阐述: ### 一、MySQL的认识 #### 1.1 架构与组成部分 MySQL作为一款广泛使用的开源关系型数据库管理系统,其架构主要分为客户端和...

    Devart_dbForge_Studio_for_MySQL_8.1.22_Downloadly.ir.rar

    同时,它还支持SQL脚本执行,方便进行批量操作。 7. **性能优化**:内置的性能分析工具可以帮助识别和解决查询性能问题,提供查询优化建议,提升数据库运行效率。 8. **版本控制**:对于团队协作来说,版本控制...

Global site tag (gtag.js) - Google Analytics