我试图理解为什么使用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条答案
按热度按时间yebdmbv41#
请您尝试使用本机查询,它对我来说速度更快,而且运行良好。