sql语句拿到数据库里执行时速度很快一般都几百ms,很少超过1s的,但通过界面运行时,哪怕是只查询一条记录,等显示出来也要5、6s,有时甚至8、9s,运行太慢了,程序中有大量的if else,如果不用if else貌似又不行,因为界面菜单太多,传参不一样而已。

解决方案 »

  1.   

    在调用hibernate查询的时候打印一下系统时间,看hibernate查询用了多少,毕竟他不是sql,if这类语句不会这么慢的
      

  2.   

    如果是在Eclipse下,可以设置断点,看看哪些地方处理慢。
    感觉不是SSH的问题,我们项目也是用SSH,不存在速度慢问题。
      

  3.   

    我看日志,hql语句都打印出来了,但界面上还没有数据显示出来,要过几秒钟才出来。
      

  4.   

    问题应该出在hibernate上,你hibernate调优就行,hibernate不注意其性能,很快你的项目就跨啦
      

  5.   

    Hibernate如何调优,我每次查的时候都是*(表中有80多个字段),如果只是筛选其中几个或一二十个的话,DAO返回值不都要自定义一个VO,那样不是要写很多VO,感觉很麻烦,所以就直接" from AA as a where ……".
      

  6.   

    我克,你不会写select a.id....么
      

  7.   

    没办法,你的没用的东西都加到内存了,80多个,用到的只20多个,多了差不多3倍数据。服务器内存消耗多了。
    开发效率是高了,效率低了吧?
    把这些地方都改为直接sql吧。
      

  8.   

    如果你为某些特定查询定义构造方法的话,是可以少选择一些的。
    比如:
    public class Employee {
        public Employee() {} //这个构造方法一定要有!    public Employee(String name, String id, String fullName) {
            this.name = name; this.id = id; this.fullName = fullName;
        }
    ...................
    }这样你查询的时候可以:
    "select new Employee(e.name, e.id, e.fullName) from Employee e where........."
      

  9.   

    也不是说80个字段一直就用20多个,而是在A部门时用了其中20多个,流到B部门时又要多几个字段少几个A部门单独用的字段,有好几个部门,想各个部门去资料库拿资料时都是同一个Service接口与DAO接口,只是根据传进来的参数用append拼装hql。
      

  10.   

    数据显示可以分页,减少内存开销~sql查询优化~
      

  11.   

    如果你不能再对SQL做优化的话。
    你可以尝试直接在前台应用程序中,写一段专门用于逻辑判断数据库数据的DLL,在数据库中少用甚至不用判断。
    这样也许是一条解决的方法。他的数据库的安全性应该是可以得到保证的!
    你可以考虑下。
      

  12.   

    select new()可以解决一些字段太多而用不到的问题,代理让它使用CGLIB,部署时使用hibernate.cglib.use_reflection_optimizer设为真,对Hibernate的加载问题能使用延迟的一定要使用。从你的表述,SQL查询似乎问题不大。你可以测试下整个Action执行的过程和调用Hibernate执行SQL语句的时间,也许问题出在页面上呢?JS问题
      

  13.   

    一般Hibernate实体类之间有关系 但是查询默认采用select查询 一个查询可能牵涉到很多SQL语句
    一对多(Set中有个属性fetch设置为join 默认select) 这是Sql语句的优化
    查询的时候用HQL语句 通过查询 避免关系查询 除非特殊情况