当前位置: 首页 > 知识库问答 >
问题:

在Hibernate+Java上性能较慢,但当我将TOAD与相同的原生Oracle查询一起使用时,性能很快

谷梁楷
2023-03-14
String myNamedNativeQuery = "select count(*) from tables "+
                            "where column1 = :nameParameter1 "+ 
                            "and column2 = :nameParameter2";  
                            //actually my sentence is much more complex!!

当我在蟾蜍身上执行这个句子时,它在几毫秒内就解决了。但是把这个句子和Hibernate一起使用

SQLQuery query = session.createSQLQuery("myNamedNativeQuery");

query.setParameter(nameParameter1, value1);
query.setParameter(nameParameter2, value2);

query.uniqueResult(); 

都需要几秒钟才能得到相同的结果。

我意识到,如果我直接在原生查询上替换参数,然后使用Hibernate执行该语句,时间会大大减少。应该是这样的:

String strQuery = session.getNamedQuery("myNamedNativeQuery").getQueryString();

myNamedNativeQuery = myNamedNativeQuery.replace("nameParameter1", value1);
myNamedNativeQuery = myNamedNativeQuery.replace("nameParameter2", value2);

SQLQuery query = session.createSQLQuery("myNamedNativeQuery");
query.uniqueResult(); 

共有1个答案

顾高扬
2023-03-14

我想这段代码发生了什么:

SQLQuery query = session.createSQLQuery("myNamedNativeQuery");
query.setParameter(nameParameter1, value1);
query.setParameter(nameParameter2, value2);
query.uniqueResult(); 

这是:

第1行:根据指定参数的一些期望值创建查询计划。

SQLQueryImpl query = new SQLQueryImpl(
                sql,
                        this,
                        factory.getQueryPlanCache().getSQLParameterMetadata( sql )
        );
 类似资料:
  • 在服务器端代码中,一般为了更好的性能,我们不应该使用“从表中选择*”,而应该根据需要查询必要的列(选择名称,从员工中添加)。这是我在数据库性能指南文章中读到的。 现在我用hibernate做了一个查询,我读到在hibernate中最好使用session.load(id)来根据主键检索记录。这将检索与给定“id”(表中的记录)的实体关联的所有列。 现在它是否与通用数据库性能指南相矛盾。使用hiber

  • 我正在运行一个查询,使用聚合打印大约300个结果。 在Robo3t/Mongo shell中执行查询非常快,但在NodeJS中使用mongoose执行查询时非常慢。 尝试寻找答案,登陆到这个链接,尝试设置,但是两个查询的差异仍然是7-8秒

  • 问题内容: 我正在为创建的2个模型的终结点/项目的输出构建REST API: 项目: 参加者: 可以说,我有10个项目:(1个查询) 我遍历了所有10个人,但我也希望所有参与者: 因此,在循环结束时,Phalcon对每个项目进行了额外的查询。 这些查询是通过访问$ result->参与者进行的,同时迭代了10个项目: 题 有没有一种方法可以事先查询关系,因此将是一个查询。 当我使用Phalcon提

  • 我正在处理一个需要JDBC调用Oracle数据库的项目。我已经设置了UCP池化来与SpringJDBC一起工作。我有一个相当简单的查询,我正在执行如下... 我的java代码来设置这个查询看起来像下面... 只要数组中只有一个id,这一切都可以正常运行。当我添加第二个ID时,查询需要将近5分钟的时间运行。如果我获取精确的查询并在SQLDeveloper中执行它,则需要.093秒。 我的代码或配置一

  • 一般来说,原生系统比docker容器快多少?

  • 我遇到了一个奇怪的问题,我向你保证我已经谷歌了很多次。 谢谢