java—使用hibernate调用mysql存储过程时的性能问题

xvw2m8pv  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(350)

我试图理解为什么使用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调用存储过程要花这么多时间吗?
我应该采取什么方法来提高性能?

yebdmbv4

yebdmbv41#

请您尝试使用本机查询,它对我来说速度更快,而且运行良好。

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

相关问题