开发中注意下面几点:
2016-05-03 09:02
204 查看
一、sql优化:
优化原则参考下面几点:
1.能过滤掉多数数据的条件放在最后,例如查询债权,从左到右的顺序为表关联、债权状态、投资人ID,项目ID,债权ID
2.能不用left/right join的尽量不用
3.多表关联将数据少的表放在右边,比如项目表和债权表关联将项目表放右边
4.数据类型精确匹配,查询条件的数据类型要和数据库类型一致,减少类型转换的消耗;比如字符类型用xxx='yy',数字类型用xxx=n;
5.能用union或between 不用 or 和 in
6.能用union all(不去重)避免用union(去重);
二、更新、删除加乐观锁,并获取更新条数:
更新数据不要更新整个表字段,只更新需要更新的字段,新开发的功能要求删除、更新要有乐观锁(可以是时间戳字段或被更新字段更新前的值),防止数据已被更新,
并且获取更新受影响的行数判断是否更新成功,如果更新不成功根据具体业务需要做相应处理
比如:
资金余额更新,where 条件可以加上 余额=原来的余额,modifytime=更新前的时间戳,
债权状态更新,where 条件可以加上 状态=原来的状态,modifytime=更新前的时间戳;
注意:现有的更新语句没有判断字段是否有值就直接更新了,未被赋值的字段会被覆盖成空值,原来的更新语句是需要改造的,不能直接使用
三、获取当前时间:
mgr层统一用getCurrentDbTime()获取当前时间(已改造,更新/seaway-p2p-biz-mgr/src/main/java/com/seaway/p2p/biz/mgr/base/BaseMgrImpl.java),不用查询数据库,但要注意这里是因为我们有时间服务器保证数据库时间一致,如果没有这个机制不能这样写;
public Date getCurrentDbTime() {
return new Date();
}
四、事务(多表操作,且表之间数据要求强一致性):
涉及事务的操作不能直接把更新操作写在ctr层(ctr层没有事务管理),统一写在mgr(分库后的代码结构略有不同,到时候会给大家培训),不需要事务的操作不要加事务
其他优化事项我们逐步完善,规范,也欢迎大家主动提出优化建议;
优化原则参考下面几点:
1.能过滤掉多数数据的条件放在最后,例如查询债权,从左到右的顺序为表关联、债权状态、投资人ID,项目ID,债权ID
2.能不用left/right join的尽量不用
3.多表关联将数据少的表放在右边,比如项目表和债权表关联将项目表放右边
4.数据类型精确匹配,查询条件的数据类型要和数据库类型一致,减少类型转换的消耗;比如字符类型用xxx='yy',数字类型用xxx=n;
5.能用union或between 不用 or 和 in
6.能用union all(不去重)避免用union(去重);
二、更新、删除加乐观锁,并获取更新条数:
更新数据不要更新整个表字段,只更新需要更新的字段,新开发的功能要求删除、更新要有乐观锁(可以是时间戳字段或被更新字段更新前的值),防止数据已被更新,
并且获取更新受影响的行数判断是否更新成功,如果更新不成功根据具体业务需要做相应处理
比如:
资金余额更新,where 条件可以加上 余额=原来的余额,modifytime=更新前的时间戳,
债权状态更新,where 条件可以加上 状态=原来的状态,modifytime=更新前的时间戳;
注意:现有的更新语句没有判断字段是否有值就直接更新了,未被赋值的字段会被覆盖成空值,原来的更新语句是需要改造的,不能直接使用
三、获取当前时间:
mgr层统一用getCurrentDbTime()获取当前时间(已改造,更新/seaway-p2p-biz-mgr/src/main/java/com/seaway/p2p/biz/mgr/base/BaseMgrImpl.java),不用查询数据库,但要注意这里是因为我们有时间服务器保证数据库时间一致,如果没有这个机制不能这样写;
public Date getCurrentDbTime() {
return new Date();
}
四、事务(多表操作,且表之间数据要求强一致性):
涉及事务的操作不能直接把更新操作写在ctr层(ctr层没有事务管理),统一写在mgr(分库后的代码结构略有不同,到时候会给大家培训),不需要事务的操作不要加事务
其他优化事项我们逐步完善,规范,也欢迎大家主动提出优化建议;
相关文章推荐
- git 使用详解(4)-- 初体验
- mojo 默认use utf8;
- eclipse中使用maven插件-Dmaven.multiModuleProjectDirectory system propery is not set.
- HTML5——新增表单元素与属性(2)
- 领域驱动设计实现之路
- mojo 默认use utf8;
- mojo 默认use utf8;
- MFC获取系统时间
- 观察者模式(二)
- 刷油漆(树形dp)
- 证券期货行业信息系统运维管理规范
- HTML5——表单新增元素与属性(1)
- HttpUtils请求XML文件,XStream解析
- Bundler 及 PMVS 常见问题&解决方法
- java多线程简单demo
- Butter Knife高级用法
- TOEFL分析之——写作句型
- HTML5——增强页面元素
- 安装服务时出现"The system cannot execute the specified program"
- 浅析Java编程中枚举类型的定义与使用