MySQL PostgreSQL JDBC URL 配置允许批量操作
MySQL
MySQL 中使用 MyBatis 进行批量操作时,通过配置 JDBC URL 参数可以显著提高性能。以下是 MySQL 专用的批量操作优化配置:
jdbc:mysql://localhost:3306/your_database?
useServerPrepStmts=true&
cachePrepStmts=true&
prepStmtCacheSize=250&
prepStmtCacheSqlLimit=2048&
rewriteBatchedStatements=true&
useCompression=true&
allowMultiQueries=true
参数详细说明
rewriteBatchedStatements (最重要)
值:
true
/false
作用: 将批量操作重写为更高效的格式
效果: 提高批量插入性能 5-10 倍
示例:
rewriteBatchedStatements=true
useServerPrepStmts
值:
true
/false
作用: 启用服务器端预处理语句
推荐值:
true
cachePrepStmts
值:
true
/false
作用: 缓存预处理语句
需要与
useServerPrepStmts=true
配合使用
prepStmtCacheSize
值: 整数 (推荐 250-500)
作用: 预处理语句缓存大小
prepStmtCacheSqlLimit
值: 整数 (推荐 2048)
作用: 缓存 SQL 的最大长度
allowMultiQueries
值:
true
/false
作用: 允许一次执行多条SQL语句(用分号分隔)
MySQL服务器配置:
[mysqld]
max_allowed_packet=256M # 增大允许的数据包大小
innodb_buffer_pool_size=4G # 增大InnoDB缓冲池
PostgreSQL
PostgreSQL 中,JDBC 连接 URL 可以通过添加特定参数来优化批量操作性能。以下是相关配置:
jdbc:postgresql://localhost:5432/your_database?
rewriteBatchedInserts=true&
reWriteBatchedInserts=true&
defaultRowFetchSize=100&
preparedStatementCacheQueries=256&
preparedStatementCacheSizeMiB=5
关键参数说明
rewriteBatchedInserts (最重要)
值:
true
/false
作用: 将批量插入重写为更高效的格式
示例:
rewriteBatchedInserts=true
效果: 可以提高批量插入性能 2-3 倍
reWriteBatchedInserts (同上,旧版驱动使用)
同
rewriteBatchedInserts
,用于向后兼容
batchSize
值: 整数 (如 100, 500)
作用: 指定每批处理的语句数量
defaultRowFetchSize
值: 整数
作用: 设置默认每次从数据库获取的行数
性能优化建议
批量大小:每批 500-1000 条记录性能最佳
事务控制:确保批量操作在单个事务中完成
连接池配置:适当增大连接池大小