Hibernate需要很长时间才能查询数据库View

时间:2018-02-01 01:42:56

标签: java sql-server spring hibernate spring-boot

开发。环境:BEGIN FOR tab2_rec IN (SELECT * FROM table_2) LOOP UPDATE table_1 SET var_txt_value = REPLACE(var_txt_value, tab2_rec.old_plan_id, tab2_rec.new_plan_id) WHERE var_name = 'Plan_ids'; END LOOP; END; /

驱动程序:Spring Boot 1.5 + Hibernate + SQL Server 2014

每当我查询一个表时,Hibernate几乎立即返回数据。 但是,当我在同一个数据库中查询View时(但View被定义为从另一个数据库中获取数据),它似乎总是需要永远。

每次查询需要2秒钟,当需要从数据库中检索100条记录时,这是不可接受的。因此,我将代码更改为使用Microsoft Driver [version: mssql-jdbc 6.2.1.jre8],以便将数据库跳转限制为1。然而,尽管此查询与之前的8分钟相比非常快,但现在仍然需要30秒,这仍然是不可接受的。

以下是我到目前为止所尝试的内容:

  1. 使用IN(List<String> queryParamList)而不是让Spring Data / Hibernate构建查询。
  2. 根据Stack Overflow上的其他建议,我添加了一个全参数@Query(从此省略了Constructor字段。)
  3. @Transient
  4. 中使用了原生查询

    以上都没有帮助减少响应时间。

    当我从控制台输出中复制Hibernate查询并针对SQL Server Management Studio中的View运行时,结果将立即返回。

    当我监视数据库上的活动时,只要在IDE中执行该行,我就会看到它在数据库中弹出&#39;活动监视器。它只是坐在那里30秒,然后返回数据。甚至SQL Server也将此视为昂贵的查询。

    我还能尝试什么?有什么建议吗?

    非常感谢任何见解/帮助。非常感谢你提前。

    修改数据源配置。在application.properties

    CRUDRepository

    控制器代码

    spring.datasource.url=jdbc:sqlserver://MRR-SQL8:1433;database=ECA2;sendStringParametersAsUnicode=false
    spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
    spring.jpa.hibernate.dialect=org.hibernate.dialect.SQLServer2014Dialect
    

    来自控制台输出的Hibernate查询

    empCandidate.setEmpView(empViewRepository.findOne(empCandidate.getApplication().getEmpNumber()));
    

    根据结果集的大小,执行时间不断增加。现在,对于2000记录的结果集,需要30秒。

0 个答案:

没有答案