Hibernate 5本机查询支持-响应速度慢

时间:2019-06-15 01:33:21

标签: oracle hibernate query-optimization jave

我正在尝试使用Hibernate createNativeQuery来获取1000行。该查询包含两个联接。当我在SQL Developer中执行相同的操作时,我看到响应在不到400毫秒的时间内出现,但是从代码中获取结果需要20秒。

  

     

员工-身份证,姓名,国家/地区ID,部门编号

     

国家/地区-ID,国家/地区名称,office_count,通货膨胀率

     

部门-ID,部门名称,经理

String queryStr = "Select e.id as id, e.name as empName, c.country_name AS countryName,
    d.dept_name AS deptName FROM  owner.Employee AS e LEFT OUTER JOIN owner.Country c
        ON e.country_id = c.id LEFT OUTER JOIN owner.Dept AS d ON e.country_id = d.id";

List<Object[]> rows  = this.getSession().createNativeQuery(queryStr).setMaxResults(1000)
    .addScalar( "id", StringType.INSTANCE )
    .addScalar( "empName", StringType.INSTANCE )
    .addScalar( "countryName", StringType.INSTANCE )
    .addScalar( "deptName", StringType.INSTANCE )
    .list();

Hibernate正在执行的其他额外处理可能导致此延迟?有什么办法可以优化代码吗?

1 个答案:

答案 0 :(得分:1)

我在您的Hibernate代码中看不到任何东西,仅此一个就可以解释性能异常下降。对addScalar()的调用可能会使速度稍微变慢,但这应该很小。

如果要大大加快查询速度,则需要考虑调整和优化。这是一种应该有用的索引策略:

CREATE INDEX country_idx ON Country (id, country_name);
CREATE INDEX dept_idx ON Dept (id, dept_name);

此策略假定Oracle将对Employee表进行全表扫描。然后,对于连接中涉及的每个记录,以上两个索引将允许快速查找。

相关问题