java代码与mysql语句的一些优化
2015-12-17 19:28
176 查看
跟着团队做了一个项目,开始的时候写了一堆烂代码,里面的逻辑可能除了我别人都看不懂,后来项目要提测,组长检查代码时感觉我的代码写的太乱,说逻辑可不可以理的相对清晰一些,代码写得条理一些。于是乎,开始了生平第一次Refactoring之旅。旅途中也曾感到崩溃,好在有同事们的帮忙,都熬过来了。总结一下review过程中的一些经验,希望自己能够记住这些碰到的坑,也希望能帮助刚刚踏上coding这条不归路的程序猿们。
先说java代码的一些优化(或者说前人的经验)。
大家经常会用到for循环,循环时经常会与array或者list的长度进行对比,举个栗子啊:
这么写当然是可以的,但改为以下代码执行效率会更高些:
这就是写循环代码时要注意的一点:消除循环里对方法的调用;
既然提到循环,就说说写循环代码时要注意的其他地方:
1、嵌套循环要遵循外小内大的原则,再举个栗子:
这是外大内小,写成外小内大应该是介个样子:
两种方法都可以实现功能,但从效率来说,当然还是建议大家遵循外小内大的原则;
2、与循环无关的计算放循环外面,还是需要举个栗子(大家要多吃栗子,吃栗子好处多啊):
再看看这种写法:
当然这个例子举的有些极端,不过希望大家记住,尽量减少在循环里进行不必要的运算,以提高程序的效率。
3、异常捕获放循环外面, eg:
因为捕获异常相当来说是比较耗费资源的,所以写出下面的方式比较好:
既然提到循环,就再说一下我们经常用到的if(其实这个是组长告诉我的,为了简化代码,提高效率。不过话说回来,貌似所以的优化都是为了达到这俩目的)。
我以前用到if是这么写的:
然后组长说这么写:
会好点,至于为什么我也不知道,反正就先记下了。
好了,说了些代码的优化,再说说sql的优化(或者说应用):
有这么一个逻辑:
有a,b,c三个表,然后要查出a,b,c中的一些内容,一开始我是这么写的:
后来在同事的帮助下才知道还能这么写:
从此记下了left join的用法,至于和inner join以及right join的区别,大家去百度一下好了,写的很详细的。
自己碰到的一些坑暂时就这些,以后遇着会再记录下来。
先说java代码的一些优化(或者说前人的经验)。
大家经常会用到for循环,循环时经常会与array或者list的长度进行对比,举个栗子啊:
for(int i = 0; i < list.size(); i++) {}
这么写当然是可以的,但改为以下代码执行效率会更高些:
int j = list.size(); for(int i = 0; i < a; i++){}
这就是写循环代码时要注意的一点:消除循环里对方法的调用;
既然提到循环,就说说写循环代码时要注意的其他地方:
1、嵌套循环要遵循外小内大的原则,再举个栗子:
for(int i = 0; i < 10000; i++) { for(int j = 0; j < 100; j ++) {} }
这是外大内小,写成外小内大应该是介个样子:
for(int i = 0; i < 100; i++) { for(int j = 0; j < 10000; j++) {} }
两种方法都可以实现功能,但从效率来说,当然还是建议大家遵循外小内大的原则;
2、与循环无关的计算放循环外面,还是需要举个栗子(大家要多吃栗子,吃栗子好处多啊):
for(int i = 0; i < 10; i++) { int a = i + 2 * 3; }
再看看这种写法:
int x = 2 * 3; for(int i = 0; i < 10; i++) { int a = i + x; }
当然这个例子举的有些极端,不过希望大家记住,尽量减少在循环里进行不必要的运算,以提高程序的效率。
3、异常捕获放循环外面, eg:
for(int i = 0; i < 10; i++) { try{ } catch (Exception e) { } }
因为捕获异常相当来说是比较耗费资源的,所以写出下面的方式比较好:
try{ for(int i = 0; i< 10; i++){} } catch(Exception e) { }
既然提到循环,就再说一下我们经常用到的if(其实这个是组长告诉我的,为了简化代码,提高效率。不过话说回来,貌似所以的优化都是为了达到这俩目的)。
我以前用到if是这么写的:
if(x.equals(y)) {}
然后组长说这么写:
if(!x.equals(y)) {}
会好点,至于为什么我也不知道,反正就先记下了。
好了,说了些代码的优化,再说说sql的优化(或者说应用):
有这么一个逻辑:
有a,b,c三个表,然后要查出a,b,c中的一些内容,一开始我是这么写的:
select a.字段名1,a.字段名2,a.字段名3,b.字段名1,b.字段名2 from a, b where a.id = b.id; select a.字段名1,a.字段名2,a.字段名3,c.字段名1,c.字段名2 from a, c where a.id = c.id;
后来在同事的帮助下才知道还能这么写:
select a.字段名1,a.字段名2,a.字段名3,b.字段名1,b.字段名2,c.字段名1,c.字段名2 from a left join b on a.id = b.id left join c on a.id = c.id
从此记下了left join的用法,至于和inner join以及right join的区别,大家去百度一下好了,写的很详细的。
自己碰到的一些坑暂时就这些,以后遇着会再记录下来。
相关文章推荐
- MySQL中的integer 数据类型
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- MySQL存储过程
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- PropertyChangeListener简单理解
- MySQL创建用户及权限控制