首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate 5原生查询支持-慢响应生成

Hibernate 5原生查询支持-慢响应生成
EN

Stack Overflow用户
提问于 2019-06-15 01:33:21
回答 1查看 227关注 0票数 1

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

表格 雇员- id,姓名,country_id,dept_id 国家- id,country_name,office_count,inflation_rate dept_name,部门经理

代码语言:javascript
复制
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所做的可能导致延迟的附加处理是什么?有什么办法可以优化代码吗?

EN

回答 1

Stack Overflow用户

发布于 2019-06-15 01:44:34

我在您的Hibernate代码中没有看到任何东西,这可以解释异常缓慢的性能。对addScalar()的调用可能会稍微放慢速度,但这应该是次要的。

如果您想使查询大大加快,那么您需要考虑调优和优化。以下是一种索引策略,应该会有所帮助:

代码语言:javascript
复制
CREATE INDEX country_idx ON Country (id, country_name);
CREATE INDEX dept_idx ON Dept (id, dept_name);

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56606691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档