关于java项目操作优化查询数据

又是伟大的豪哥无私献出的干货,在此做下记录;

关于如何优化操作数据从底层实现,执行引擎,SQL语句三个方面作答

1.对于底层实现,当然是针对像MySQL这种开源数据库,为了满足公司的特定需求,或者处于性能上的考虑,会定制或者改善一些功能。

  • Java基本数据类型时间分析

    1.         int的运算速度最快,short次之,byte再次之,long再次之。float和double运算速度最慢。

    2.         除法比乘法慢的太多,基本上除法是乘法的9倍时间。当然,除了浮点型外。根据intel cpu的参考数据,乘法计算时间是移位运算的4-5倍是比较正常的。

    3.         long类型的计算很慢,建议一般少使用它。

    4.         double运算速度和float相当;

    5.         浮点的乘法比除法要慢。但是,这个结果并不能真正说明问题。这个结果只是一个一般性的,在特殊情况下,乘法还是比除法快

  • Java类和接口调用时间分析

    • 类的创建
    • 方法的调用
  • Java基本操作时间耗费

    • 基本语句
    • case的时间耗费
  • 基本优化策略
    •        基本的优化策略有以下几条:

      1.         选定优化目标。优化不是对所有代码进行优化,这是因为优化代码的代价很高。优化只需要针对少部分代码进行。在这里,90/10或者80/20规则发挥着重要作用。找到代码中最影响速度的地方,然后把块骨头啃下来!

      2.         操作符简约。换一个操作符代替原有操作符。这里说的最主要例子就是:用“>>=n”替换“/= 2^n”和“<<=n”替换“*=2^n”。Java用不着第2种替换。

      3.         共同表达是提取。提取2个表达式中相同的部分,避免同一个式子重复计算。比如:double x = d * a*b;

      double y = e * a*b;

      就可以化为:

      c = a*b;

      x = d*c;

      y = e*c;

      4.         代码移动。把那些在运算中不改变值的变量放到前面先计算好。比如:

      for(int i=0;i

      {

             x[i] *= Math.PI * Math.cos(y);

      }

      就可以修改为:

      double d = Math.PI * Math.cos(y);

      for(int i=0;i

      {

             x[i] *= d;

      }

      5.         分解循环。循环可以简化代码,同时,他们也增加了额外的循环开销。可以通过减少循环次数或者取消循环来获得更好的性能。比如:

      for(int i=0;i<1000000;i++)

      {

             x[i] = i;

      }

      就能够变成:

      for(int i=0;i<1000000;i+=2)

      {

             x[i] = i;

             x[i+1] = i+1;

      }

      6.         循环的替换。一般认为把“for(i=0;i”替换成“for(i=n;--i>=0;)”会有更好的效果。不过,我们的测试结果显示,在JDK5.0的环境下面,这种方式几乎没有任何速度提升。

      7.         取消for判断。把“for(i=0;i”转化为“for(i=0;;i++)”,如果里面的代码能够在i>=n的时候出错的话,这段循环就能够自己结束(通过Exception)。可是,测试的结果说明,只有在n特别大的时候,比如1000万,这种方式才能提高速度。其依据是:exception特别耗时。

  • Java的优化建议

    1.         使用已经存在的对象来生成新对象。不要用手动初始化的方式生成对象的拷贝。

    2.         避免生成新的对象。

    3.         严格控制synchronized关键字的使用。

    4.         利用System.arraycopy拷贝数组。

    5.         使用int,使用int/long代替浮点,用乘不用除,多用布尔运算。

    具体java优化细节推荐文章: http://blog.csdn.net/mr_smile2014/article/details/50112723 

2.执行引擎见得最多的便是一些参数的配置优化,当然也是基于底层的实现,比如开启缓存,设置缓存大小等等

  • 优化数据访问
  • 重构查询方式
  • 查询缓存,查询优化处理等

    更多具体内容推荐查看文章: http://blog.csdn.net/xifeijian/article/details/45460763 

3.SQL语句优化是我们经常干的事,可以从执行时间消耗,扫描表的类型等等这些指标判断

  • sql优化准则
禁用select *
使用select count(*) 统计行数
尽量少运算
尽量避免全表扫描,如果可以,在过滤列建立索引
尽量避免在where子句对字段进行null判断
尽量避免在where子句使用!= 或者<>
尽量避免在where子句使用or连接
尽量避免对字段进行表达式计算
尽量避免对字段进行函数操作
尽量避免使用不是复合索引的前缀列进行过滤连接
尽量少排序,如果可以,建立索引
尽量少join
尽量用join代替子查询
尽量避免在where子句中使用in,not in或者having,使用exists,not exists代替
尽量避免两端模糊匹配 like %***%
尽量用union all代替union
尽量早过滤
避免类型转换
尽量批量insert
优先优化高并发sql,而不是频率低的大sql
尽可能对每一条sql进行explain
尽可能从全局出发

 

  • SQL执行计划(语句查询优化)

    explain显示了MySql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句

关于explain的使用及了解,推荐查阅

文章: http://blog.csdn.net/zhuxineli/article/details/14455029 

以及这个更详细的了解 :  http://www.jb51.net/article/38357.htm  

转载于:https://my.oschina.net/java1314/blog/793087

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值