我对n+1的概念感到困惑,我知道它只是用于检索数据(选择子句)。但如果我有很多实体,那么我会循环它们,并为每个元素调用更新语句。它被称为N+1吗?此外,Hibernate saveOrUpdateAll(..)将循环遍历所有元素并生成查询,对于大型输入,最佳做法是什么?谢谢你的帮忙我尝试在互联网上研究这个概念,但我仍然不清楚如何更新或删除查询
yftpprvb1#
N+1现象通常对应于这样一个事实,即Hibernate可能对属于先前由第一次查询检索到的N个元素的列表中的每个元素执行一次查询。N+1查询现象可能会产生较差的性能,并且在大多数情况下必须使用各种暗示连接的策略来缓解。如果您有多个要更新的对象,并且更改之间没有公用逻辑,则无法避免为每个对象触发一个更新查询。如果存在公用逻辑,例如,为所有对象的一个属性设置相同的值,则可以进行批更新,即,执行一个查询以一次更新所有对象。
1条答案
按热度按时间yftpprvb1#
N+1现象通常对应于这样一个事实,即Hibernate可能对属于先前由第一次查询检索到的N个元素的列表中的每个元素执行一次查询。N+1查询现象可能会产生较差的性能,并且在大多数情况下必须使用各种暗示连接的策略来缓解。
如果您有多个要更新的对象,并且更改之间没有公用逻辑,则无法避免为每个对象触发一个更新查询。如果存在公用逻辑,例如,为所有对象的一个属性设置相同的值,则可以进行批更新,即,执行一个查询以一次更新所有对象。