【发布时间】:2018-11-02 11:03:55
【问题描述】:
我试图理解为什么当我使用 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 调用存储过程需要这么多时间?
我应该采取什么方法来提高性能?
【问题讨论】:
-
直接在 MySQL 中测试时,是否获取了所有行?
-
我运行了相同的存储过程
-
这并不一定意味着您的客户端获取了所有行,这有时会导致不同的性能特征。
-
我可以测试一下吗?
-
检查查询工具中的选项,它们通常有一个选项(在配置、菜单或查询屏幕本身)来获取几个页面或获取所有页面。
标签: java mysql database hibernate stored-procedures