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

来源:互联网 发布:域名注册后怎么建网站 编辑:程序博客网 时间:2024/05/16 14:27

跟着团队做了一个项目,开始的时候写了一堆烂代码,里面的逻辑可能除了我别人都看不懂,后来项目要提测,组长检查代码时感觉我的代码写的太乱,说逻辑可不可以理的相对清晰一些,代码写得条理一些。于是乎,开始了生平第一次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.字段名1a.字段名2a.字段名3,b.字段名1,b.字段名2 from a, b where a.id = b.id;select  a.字段名1a.字段名2a.字段名3,c.字段名1,c.字段名2   from a, c  where a.id = c.id;

后来在同事的帮助下才知道还能这么写:

select  a.字段名1a.字段名2a.字段名3,b.字段名1,b.字段名2,c.字段名1,c.字段名2  from  a left  join  b on  a.id = b.idleft  join  c on  a.id = c.id

从此记下了left join的用法,至于和inner join以及right join的区别,大家去百度一下好了,写的很详细的。
自己碰到的一些坑暂时就这些,以后遇着会再记录下来。

0 0