最常见的陷阱之一是臭名昭著的 n +
1选择问题 。默认情况下,Hibernate不会加载您不需要的数据。这减少了内存消耗,但使您面临n +
1选择的问题,可以通过切换到正确的提取策略来检索将对象加载到适当初始化状态所需的所有数据来避免此问题。
但是也不要取太多,否则会遇到相反的问题,即 笛卡尔积问题 :与执行许多SQL语句不同,您可能最终会创建检索过多数据的语句。
这就是调优的全部目的:为应用程序的每个用例(或至少对于需要调整的用例),在数据不足和数据过多之间找到中间点。
我的建议:
- 首先在Hibernate级别激活SQL日志记录
- 运行关键的用例(20%的人使用了80%的时间),或者如果您有那么奢侈的话,甚至全部使用
- 识别可疑查询并优化提取计划,检查索引是否使用正确等
- 参与您的DBA



