我试图理解为什么当我使用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调用存储过程需要花费更多时间?
我应该采取什么方法来提高绩效?
答案 0 :(得分:0)
请你尝试使用原生查询,对我来说速度更快,效果更好。
List<Object[]> query = (List<Object[]>) mySessionFactory.getCurrentSession()
.createNativeQuery("{CALL my_stored_procedure(:maxResultSize)}")
.setParameter("maxResultSize", maxResultSize).getResultList();