java集群优化——ORM框架查询优化原理
2015-07-27 17:32
477 查看
众所周知,当下的流行的企业级架构中,ORM一直是最基础的部分,在架构设计的底层,对逻辑层提供面向对象的操作支持,而事实总是和我们预想的有所偏差,ORM在提供了较好的操作体验时,也流失了一部分原生SQL的灵活性与高效性,当然,这个问题不影响我们使用ORM框架,但是却阻碍了我们网站流量的提升,尤其是在企业级的多关系复杂查询方面,性能瓶颈是不得不提的部分!
针对此问题,大多数的ORM框架提供一个折中的解决方案,就是在查询语句中,构造一个对象,可以是一个Entity,也可以是Map等,这样的方案,很大程度上解决了级联查询的问题,今天,我们一起来揭开这层面纱,看看这里的优化,是如何做到的!
大家可以看到中间的学生实体,和其他的实体关联太多,如果我们使用一般的查询语句会变得非常缓慢,我们测试在查询10条记录,不开启懒加载的前提下,10分钟这些数据都不能加载,大家看看日志文件,发的sql语句:
From Student where isDlete=0
日志文件:
这只是一小部分,我们做的统计是,发出了241条查询语句,这样的结果是客户不能容忍的,通过研究,我们发现直接发 from 虽然可以返回对象,但是严重拖慢查询效率,在from前加select语句,就会好很多,因为加上select后,就会组合成join语句,最后只发一天sql语句,对效率的提升是明显的!
针对此问题,大多数的ORM框架提供一个折中的解决方案,就是在查询语句中,构造一个对象,可以是一个Entity,也可以是Map等,这样的方案,很大程度上解决了级联查询的问题,今天,我们一起来揭开这层面纱,看看这里的优化,是如何做到的!
现象:
先看看我们的实验中用到的几个实体大家可以看到中间的学生实体,和其他的实体关联太多,如果我们使用一般的查询语句会变得非常缓慢,我们测试在查询10条记录,不开启懒加载的前提下,10分钟这些数据都不能加载,大家看看日志文件,发的sql语句:
原因
查询语句:From Student where isDlete=0
日志文件:
这只是一小部分,我们做的统计是,发出了241条查询语句,这样的结果是客户不能容忍的,通过研究,我们发现直接发 from 虽然可以返回对象,但是严重拖慢查询效率,在from前加select语句,就会好很多,因为加上select后,就会组合成join语句,最后只发一天sql语句,对效率的提升是明显的!
总结:
一个问题的解决方法,有时候会非常简单,而又对自己当初的设计懊悔不已,其实这都是一个过程,一个财富,我们遇到的每一个问题,都是为了让我们在以后的设计中有更好的想法,当然更重要的一点就是那别人撞的头破血流的经验作为自己的经验,提升自己的能力,这也是企业喜欢见到的!相关文章推荐
- JAVA中变量的类型及命名规范
- Spring -- 4.0新特性 -- 泛型依赖注入
- JAVA--多线程基础
- window7 jdk环境变量配置
- JDK/JRE/SERVER/CLIENT/JAVA/JAVAC/JAVAW等等
- i!=i的测试,java数组
- 希尔排序算法原理及JAVA实现
- AVL树的JAVA实现及AVL树的旋转算法
- java针对电话号码正则匹配实例
- Android 软件开发之如何使用Eclipse Debug调试程序详解
- java使用正则表达式判断邮箱格式是否正确的方法
- Spring的依赖注入(DI)和控制反转(IOC)
- 《深入浅出struts2》--第七章,类型转换-支持与Collection一起使用
- JAVA、JDK等入门概念,下载安装JAVA并配置环境变量
- mvn -version时报错:java.lang.UnsupportedClassVersionError
- Spring MVC之@RequestBody, @ResponseBody 详解
- Java复习第一天
- java分布式框架-JDF
- javaWeb web.xml 配置
- spring依赖注入