0

什么时候应该使用“eclipselink.join-fetch”,什么时候应该使用“eclipselink.batch”(批处理类型 = IN)?

join fetch 是否有任何限制,例如要获取的表的数量?

4

1 回答 1

0

答案总是特定于您的查询、特定用例和数据库,因此对于何时使用其中一个或是否使用任何一个都没有硬性规定。除非您认真对待性能并愿意在生产负载条件下进行测试,否则您无法确定要使用什么——就像任何查询性能调整一样。

Join-fetch 正是它所说的,导致所有数据在一个查询中被带回。如果你的目标是减少 SQL 语句的数量,那就完美了。但这是有代价的,因为内部/外部联接、笛卡尔联接等可以增加发送的数据量和数据库必须做的工作。

批量获取是一个额外的查询 (1+1),可以通过多种方式完成。IN 收集所有外键值并将它们放入一个语句中(如果您在 oracle 上有 >1000,则更多)。Join 类似于 fetch join,因为它使用原始查询中的条件来选择关系,但不会返回尽可能多的数据,因为它只获取所需的行。EXISTS 非常相似,使用子查询进行过滤。

于 2020-05-27T14:40:13.683 回答