使用Hibernate调用MySQL存储过程时的性能问题

时间:2018-05-23 12:40:00

标签: java mysql database hibernate stored-procedures

我试图理解为什么当我使用Hibernate从Java运行它时,我的存储过程的执行时间要高得多,而不是直接在MySQL中运行它。

存储过程本身负责将20000行从表A移动到表B,然后在表A中删除它们。

在MySQL中运行存储过程大约需要18秒。

在Java中,我使用Hibernate并创建一个查询:

Query query =
    mainSession
        .createSQLQuery("{CALL my_stored_procedure(:maxResultSize)}")
        .setParameter("maxResultSize", maxResultSize);

然后执行查询并刷新并清除会话:

List<BigInteger> rows = query.list();
mainSession.flush();
mainSession.clear();

大约需要248秒。

有谁知道为什么用Hibernate从Java调用存储过程需要花费更多时间?

我应该采取什么方法来提高绩效?

1 个答案:

答案 0 :(得分:0)

请你尝试使用原生查询,对我来说速度更快,效果更好。

List<Object[]> query = (List<Object[]>) mySessionFactory.getCurrentSession()
                .createNativeQuery("{CALL my_stored_procedure(:maxResultSize)}")
        .setParameter("maxResultSize", maxResultSize).getResultList();