又是伟大的豪哥无私献出的干货,在此做下记录;
关于如何优化操作数据从底层实现,执行引擎,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