您的位置:首页 > 数据库 > MySQL

java代码与mysql语句的一些优化

2015-12-17 19:28 176 查看
跟着团队做了一个项目,开始的时候写了一堆烂代码,里面的逻辑可能除了我别人都看不懂,后来项目要提测,组长检查代码时感觉我的代码写的太乱,说逻辑可不可以理的相对清晰一些,代码写得条理一些。于是乎,开始了生平第一次Refactoring之旅。旅途中也曾感到崩溃,好在有同事们的帮忙,都熬过来了。总结一下review过程中的一些经验,希望自己能够记住这些碰到的坑,也希望能帮助刚刚踏上coding这条不归路的程序猿们。

先说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的区别,大家去百度一下好了,写的很详细的。

自己碰到的一些坑暂时就这些,以后遇着会再记录下来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java mysql 经验