日期:2014-05-19  浏览次数:20702 次

【求助】ssh 查询 视图 时快时慢 查了2天都没找出问题
项目是写的一个服务,放在服务器上,用平板去访问。架构是ssh,数据库是sqlserver,查询sqlserver中的一个复杂的视图的时候,有时候是几秒,有时候是10秒以上,概率是50%慢。 不知道是为什么。求有经验的高手指导,为这事儿,都查了好几天了。谢谢。

当单独去数据库查询该视图,基本上都是1-2秒就出来,偶尔出现慢的情况,但是概率很小。


而且特别是第一次启动数据库的时候,会很慢。


在项目中语句很简单,就是调用视图查询,没有多余的语句。用的dbcp,后来改的c3p0,都是时快时慢。

在服务查询数据库的前一句记录了时间,查询完也记录了时间,就是查询的时候占用了很大时间。和网络应该没有关系,因为在服务器上直接访问服务,也是一样的情况。

求高手指教,真的不知道咋整了
------解决方案--------------------
你视图关联的东西多吗。有没用到分布式事务。我之前用分布式事务的时候视图也是查的很慢,后面把分布式事务换成jdbc事务就快了。hibernate已经是ORM的框架了不建议使用hibernate查视图。视图也是几张表的关联。hibernate已经可以提供表之间的关联对应关系了。最好还是直接查表,有什么关联关系建议hibernate的对象映射。可以使用延迟初始化
------解决方案--------------------
视图关联的东西太多了,会大大影响查询速度的。还有你的hibernate是多少版本的。分布式事务最好别查视图。我之前也是用分布式,就是事务获取连接花了很多时间。改成hibernate事务或jdbc事务后就快多了。视图内的关联不要太多。用了hibernate不建议再使用视图了。因为hibernate已经提供了关系映射,那些需要关联的建立关系映射就可以了。
------解决方案--------------------
用JDBC自己手动建立连接,关闭连接,看速度怎么样,如果还是慢的话,就是视图建的有问题了,优化视图吧