gpt4 book ai didi

performance - hibernate ,使用参数查询 SQL。表现不佳

转载 作者:行者123 更新时间:2023-12-04 05:13:16 24 4
gpt4 key购买 nike

我有一个与使用 JPA 的 SQL 查询的性能相关的问题。

响应时间:

  • 使用 Toad - 200 毫秒
  • 在我的项目中使用 Glassfish 2.1、Java 1.5、Hibernate 3.4.0.ga - 27 秒

  • 甲骨文 10g

    Glassfish 和 Toad 托管在同一台机器上。我已经从同一个 Glassfish、JPA 等连接到其他 ddbb,并且性能很好。所以我不知道发生了什么。

    我有两个不同的环境。在其中之一(理论上最糟糕的)中,它运行得很快。另一方面,这是我遇到问题的地方。

    使用 执行查询Javax.persistence.Query 对象,并在此对象中使用 setParameter() 方法插入参数。之后,我调用 getResultList() 方法,该方法将寄存器返回给我。在这一点上是时间过长的地方。

    但是,如果我替换代码中的参数,直接调用 getResultList() 方法,而不在 Query 对象中设置参数,则性能会好得多。

    任何人都可以帮助我了解有关问题或如何追踪问题的任何线索?

    查询
    SELECT A, B, ..., DATE_FIELD FROM
    (SELECT A, B, C FROM Table1
    WHERE REGEXP_LIKE(A, NVL(UPPER(:A),'')) AND DATE_FIELD = :DATE
    UNION
    SELECT A, B, C FROM Table2
    WHERE REGEXP_LIKE(A, NVL(UPPER(:A),'')) AND DATE_FIELD = :DATE)

    Java 代码
    public Query generateQuerySQL(String stringQuery, HashMap<String, Object> hParams) {
    Query query = em.createNativeQuery(stringQuery);
    if (hParams != null) {
    for (Iterator<String> paramNameList = hParams.keySet().iterator(); paramNameList.hasNext() {
    String name = paramNameList.next();
    Object value = hParams.get(name);
    query.setParameter(name, value);
    }
    }
    return query;
    }

    最佳答案

    Query query = em.createNativeQuery(stringQuery);
    将详细说明执行查询的查询计划。不幸的是,用于详细说明查询计划的元数据不适合执行查询时将使用的实际参数值。

    如果在制定计划之前替换参数:计划很好并且运行速度非常快。

    类似问题 here

    关于performance - hibernate ,使用参数查询 SQL。表现不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14626646/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com