Java后端接口、Mysql优化建议与规范

2023-05-30 0 1,004

一、后端USB

明令禁止选用递回;其原因:每天递回初始化时能向栈中push现阶段方式的运转状况(当晚),而Java栈缓存的选用少于管制的大半小时,流程会再次出现栈极度;

防止层次嵌套循环;

特别注意方式、类文档中的标识符量,适当分离;

选用基本上类型表述表达式时,一千万特别注意该表达式值可能为null的情形,这时提议选用相关联的包装袋Canillac表述表达式;

防止在同一个USB中过多地出访资料库,提议单次掌控在3次以上;

防止过多选用static表达式;其原因:动态表达式和类的开发周期并行;

尽可能选用lazy loading的思路,即在须要的这时候才已经开始建立表达式和第一类等;

将许多须要发生变动的实用性或美术内部结构设计写在特性文档中;

后端USB须要提供更多必要性的奇偶校验,千万别过分倚赖后端奇偶校验;

SQL句子极短时提议选用Provider堆叠,堆叠查阅Sql时加之” where 1 = 1 “;

倡导极度PCB,提升标识符时效性和可移植性等;

防止选用硬代码,多选用final表述常表达式,提升时效性;

2、SQL强化

尽可能选用单纯的SQL,防止多表查阅和在SQL中处置繁杂的方法论;

防止选用SQL句子次序,尽可能在流程中进行次序;

查阅时防止全表扫描器,适当减少检索;

内部结构设计表内部结构时:id、created、updated、version NOT NULL;id AUTO_INCREMENT

在查阅时千万别对所查阅列选用函数或者运算,否则检索无法选用到;

尽可能选用GROUP BY替换DISTINCT;

JOIN时选用小结果集驱动大结果集;

提议选用”临时表”暂存中间结果;

模糊查阅(LIKE)时防止在关键词前选用”%”(如:LIKE %小分期),否则查阅必然是全表扫描器;

对查阅进行强化,应尽可能防止全表扫描器,首先应考虑在where 及 order by涉及的列上建立检索。

应尽可能防止在 where 子句中选用!=或<>操作符、函数操作、表达式(如:num/2)和null值判断,否则将引擎放弃选用检索而进行全表扫描器。

应尽可能防止在 where 子句中选用 or 来连接条件,否则将导致引擎放弃选用检索而进行全表扫描器,如:

select id from t where num=10 or num=20

可以这样查阅:

select id from t where num=10

union all

select id from t where num=20

in 、 not in 、or 也要慎用,否则条件少于一定数量会导致检索失效(特别特别注意:严格明令禁止in后面选用子查阅),如:

select id from t where num in(1,2,3)

对于连续的数值,能用 between 就千万别用 in 了:

select id from t where num between 1 and 3

检索并不是越多越好,检索固然可以提升相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建检索。一个表的检索数最好千万别少于6个。

任何地方都要慎重选用 select * from t取出所有列 ,千万别返回用不到的任何字段。

适当将繁杂查阅切分为若干个单表查阅或简易查阅。如将关联查阅分解为若干个单表查阅。

老老实实按照规范化写SQL,比如字符串一律该加引号就加引号。WHERE username = 1380000000和WHERE username = 1380000000是不同的。后者能正确选用检索,前者不能。

资料库表有version字段的,应当强制不为空。因为baseDao每天更新记录都会在这个字段加1,为空的话会再次出现极度。

where/group by/order by 的条件里,明令禁止给检索列套上函数,会让检索失效。例如:WHERE date(created) > 2021-01-01 这样的写法绝对明令禁止。

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务