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

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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值