浏览 842 次
|
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2008-05-27 关键字: 面试
1.在数据库中条件查询速度很慢的时候,如何优化?
2.在hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来的结果集并没有一个实体类与之对应,如何解决这个问题? 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2008-05-27
1.在数据库中条件查询速度很慢的时候,如何优化?
建立正确有效的索引,是最通常的想法吧? |
|
| 返回顶楼 | |
|
最后更新时间:2008-05-27
1-感觉范围好大。。。最直接就是花钱加内存 如果用JAVA的话 可以用数据库连接池、缓存技术等,hibernate的话就是lazy延迟加载不需要的记录,数据库的话要避免全表扫描,建索引,数据文件跟重做日志文件放不同磁盘以避免IO争用等。
2-查出字段没POJO对应的话 那你用hibernate的话,也可以直接写SQL,不用HQL,查出来的东西就包在一个resultset里,你爱怎么处理就怎么处理咯。当然还有其他办法。。。 以上纯属自己的想法。。。经验不够。。。说错莫怪~ |
|
| 返回顶楼 | |
|
最后更新时间:2008-05-27
rxgp02a 写道 1.在数据库中条件查询速度很慢的时候,如何优化?
2.在hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来的结果集并没有一个实体类与之对应,如何解决这个问题? 第一个问题。 1.建索引 2.减少表之间的关联 3.优化sql,尽量让sql很快定位数据,不要让sql做全表查询,应该走索引(具体怎么优化有专门的文章介绍) 4.简化查询字段,没用的字段不要,已经对返回结果的控制,尽量返回少量数据 第二个问题 解决方案一,按照Object[]数据取出数据,然后自己组bean 解决方案二,对每个表的bean写构造函数,比如表一要查出field1,field2两个字段,那么有一个构造函数就是Bean(type1 filed1,type2 field2) ,然后在hql里面就可以直接生成这个bean了。具体怎么用请看相关文档,我说的不是很清楚。 |
|
| 返回顶楼 | |
|
最后更新时间:2008-05-27
rxgp02a 写道 1.在数据库中条件查询速度很慢的时候,如何优化?
2.在hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来的结果集并没有一个实体类与之对应,如何解决这个问题? 1,可以建索引,或者改变WHERE条件的顺序. 2.可以用一个数组来存储字段. |
|
| 返回顶楼 | |
|
最后更新时间:2008-05-27
谢谢大家的解答,尤其是wolfbrood,非常感谢。
|
|
| 返回顶楼 | |
|
最后更新时间:2008-05-28
1、优化应该分成2个部分吧
第一就是从数据库的数据结构来优化,建索引,建表分区等等 第二就是sql语句的优化,把数据量大的表排在前面,where查询条件中查询出的数据 多的排前面;尽量少用子查询,不要用in之类的关键字,用exist,还有。。。。。 2、貌似实体表的xml里面有个batch-size属性吧,这个没具体研究,不过可以解决这个问题。我们用的是iBatis,比hibernate方便多了 |
|
| 返回顶楼 | |
|
最后更新时间:2008-05-28
2.可以建一个动态bean
如:DynaBean dynaBean = new LazyDynaBean();之类的 或者直接利用hql取出每个表相对的pojo对象的数组. |
|
| 返回顶楼 | |
|
最后更新时间:2008-05-28
1、《Oracle语句优化规则汇总1-9》已经写的比较详细了。
http://news.newhua.com/news1/programming/2008/218/08218937442EA73C7DBK6JCH28IJ3G.html 2、http://lixw.javaeye.com/blog/75303 |
|
| 返回顶楼 | |








