Java学习Day27

今天继续学习Java的高性能MySQL
这是昨天例题的精确解读
一、连接池设计(性能基石)
使用 HikariCP 连接池而非原生 DriverManager,核心优化点:
参数配置:最大连接数设为 8(通常为 CPU 核心数的 2 倍),避免线程竞争;连接超时 30 秒,防止资源无限等待
预编译开关:URL 中useServerPrepStmts=true启用 MySQL 服务端预编译,缓存 SQL 执行计划,减少重复解析开销
自动管理:通过try-with-resources自动释放连接、Statement 和 ResultSet,杜绝连接泄漏导致的系统雪崩
二、SQL 语句优化(核心提升)
查询语句通过三点实现效率跃升:
精准投影:只查询id、order_no等 4 个必要字段,比SELECT *减少 80% 数据传输量,尤其规避大文本字段的无效加载
条件过滤:user_id精准定位用户,status=1筛选有效订单,create_time限制 30 天范围,三重过滤大幅缩小扫描范围
高效分页:LIMIT ?,?仅返回当前页数据,避免全表加载。注意:超大页码场景需优化为WHERE id > lastId形式,避免偏移量扫描开销
三、索引策略(性能保障)
必须创建联合索引idx_orders_user_status_time (user_id, status, create_time):
遵循最左前缀原则,user_id+status快速定位用户有效订单
create_time既用于范围过滤(30 天内),又支持排序,形成覆盖索引,无需回表查询
避免索引失效:不在索引列使用函数(如DATE(create_time)),不用NOT IN等破坏索引的操作
四、预编译机制(安全与性能兼顾)
PreparedStatement通过参数绑定实现双重价值:
性能上,SQL 仅解析一次,后续复用执行计划
安全上,自动转义特殊字符,防止 SQL 注入

posted @ 2025-07-27 20:32  灰太狼的蛋炒饭  阅读(2)  评论(0)    收藏  举报