spring + mybatis + mysql项目调优

本文详细探讨了Spring、Mybatis和MySQL项目的调优策略,包括MySQL的SQL编写规范、表设计和索引优化,以及使用EXPLAIN进行SQL调优。此外,还涉及Mybatis的使用技巧,避免嵌套查询以提升性能,以及Java代码中处理数据的注意事项。缓存方面,使用Ehcache提高热点数据访问速度。JSP代码优化,减少Java代码和提高页面效率。Tomcat和JVM调优,通过调整配置参数提高并发能力和性能。
摘要由CSDN通过智能技术生成


此贴记录一下个人在项目维护阶段进行的速度上的调优方案,案例项目是从别人那里接手的项目,是一个与mysql交互的spring web项目,在网站速度上的调优顺序如下:
1, sql审查与修改,提升大数据量时sql的查询速度,调整不合理的字段设计,增加索引,表内分区等。
2, 调整mybatis的使用方式,减少冗余的sql查询。
3, 调整项目内java代码对数据的处理方式。
4, 使用数据缓存。
5, 审查jsp代码,减少jsp代码中使用的java代码,提升前端网页的响应速度。
6, tomcat,jvm调优

mysql

sql编写的规范:
1, 尽量不使用select * from的方式进行查询,特别是表关联查询的时候。
2, or 和 in,在数据量足够大的情况下,in的效率更高(未证实)
3, 少使用函数和触发器
4, 关于in 和 exists ,in之后的表应为小表,exists之后的表应为大表。
5, 尽量避免在WHERE子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描

mysql表设计:
1, 表内字段都要设计为不能为null,null值很难查询优化且占用额外的索引空间。
2, 尽量使用INT而非BIGINT,如果非负则加上UNSIGNED(这样数值容量会扩大一倍),当然能使用TINYINT、SMALLINT、MEDIUM_INT更好。
3, 尽量使用TIMESTAMP而非DATETIME
4, 单表不要有太多字段,建议在20以内

索引:
1, 表内不使用外建,由程序去保证关系
2, 字符字段最好不要做主键(主键建议为int类型)
3, 存在大数据量的表一般会与其他的表有多个字段的关联关系,索引应建立在这几个关联比较频繁的字段上
4, 应尽量避免在WHERE子句中对字段进行NULL值判断,否则将导致引擎放弃使用索引而进行全表扫描

(案例项目中也使用到了mongo,mongo同样可以创建索引提高效率)

EXPLAIN 进行sql调优参考:
EXPLAIN可以对编写的sql进行分析,展示出sql中各项指标,方便调试。
使用方式: EXPLAIN SELECT * FROM TABLE…;

其中主要的返回参数如下:
在这里插入图片描述
select_type:
SIMPLE:简单SELECT(不使用UNION或子查询)
PRIMARY:最外面的SELECT
UNION:UNION中的第二个或后面的SELECT语句
DEPENDENT UNION:UNION中的第二个或后面的SELECT语句,取决于外面的查询
UNION RESULT:UNION 的结果
SUBQUERY:子查询中的第一个SELECT
DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询
DERIVED:导出表的SELECT(FROM子句的子查询)

table:查询涉及到的表。

partitions: 查询的表分区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值