项目是写的一个服务,放在服务器上,用平板去访问。架构是ssh,数据库是sqlserver,查询sqlserver中的一个复杂的视图的时候,有时候是几秒,有时候是10秒以上,概率是50%慢。 不知道是为什么。求有经验的高手指导,为这事儿,都查了好几天了。谢谢。当单独去数据库查询该视图,基本上都是1-2秒就出来,偶尔出现慢的情况,但是概率很小。
而且特别是第一次启动数据库的时候,会很慢。
在项目中语句很简单,就是调用视图查询,没有多余的语句。用的dbcp,后来改的c3p0,都是时快时慢。在服务查询数据库的前一句记录了时间,查询完也记录了时间,就是查询的时候占用了很大时间。和网络应该没有关系,因为在服务器上直接访问服务,也是一样的情况。求高手指教,真的不知道咋整了

解决方案 »

  1.   

    你视图关联的东西多吗。有没用到分布式事务。我之前用分布式事务的时候视图也是查的很慢,后面把分布式事务换成jdbc事务就快了。hibernate已经是ORM的框架了不建议使用hibernate查视图。视图也是几张表的关联。hibernate已经可以提供表之间的关联对应关系了。最好还是直接查表,有什么关联关系建议hibernate的对象映射。可以使用延迟初始化
      

  2.   


    分布式事务?菜鸟不是很懂,视图比较复杂,直接查表估计不行,很多表关联。然后改成直接用sql语句在程序里,结果也是一样的。延迟初始化?我查查,关键问题是时快时慢。。郁闷。谢谢你的回答
      

  3.   

    视图关联的东西太多了,会大大影响查询速度的。还有你的hibernate是多少版本的。分布式事务最好别查视图。我之前也是用分布式,就是事务获取连接花了很多时间。改成hibernate事务或jdbc事务后就快多了。视图内的关联不要太多。用了hibernate不建议再使用视图了。因为hibernate已经提供了关系映射,那些需要关联的建立关系映射就可以了。
      

  4.   

    没办法,视图是其他厂商提供的,没法改,hibernate是3.0以上的,应该不是获取连接的地方,因为他查询其他的视图都很快哦。
      

  5.   

    视图不能改,那视图上的关联的表有哪些知道吗,如果知道的话直接建立关系映射用hibernate的延迟初始化去查表要比查复杂视图来的快。如果这个都不知道的话。把分布式事务改成jdbc事务。我之前的项目也是这样改成jdbc事务后速度就快了,再也不慢了
      

  6.   

    用JDBC自己手动建立连接,关闭连接,看速度怎么样,如果还是慢的话,就是视图建的有问题了,优化视图吧