我需要通过Hibernate将许多实体插入到数据库中。所以,我想找到最有效的Id生成算法。
因此,Hibernate Documentation存在四种广泛使用的生成策略:
我应该使用MySQL数据库,所以我不能应用SEQUENCE生成策略。其他策略怎么样?从性能的角度来看效率最高的是什么?
答案 0 :(得分:8)
Hibernate中最好的id生成器是增强型表和增强型序列,并配有适当的优化器,例如 hilo 。我有增强表 + hilo 的经验,每秒插入超过10,000条记录。
BTW声明“hilo每个生成的实体需要一个额外的查询”这句话显然是错误的:优化器的重点是阻止这个。
答案 1 :(得分:1)
由于您无法使用SEQUENCE
,AUTO
只是自动从现有算法中选择支持的生成器算法,因此您只需IDENTITY
和TABLE
。
TABLE
:使用hi / lo算法有效地生成long,short或int类型的标识符,给定表和列作为hi值的来源。 hi / lo算法生成仅对特定数据库唯一的标识符。 - >表示每个生成的实体额外查询。 (如果使用优化器,则情况并非如此。不幸的是,如果未指定优化器,则通常不使用优化器。)
IDENTITY
:支持DB2,MySQL,MS SQL Server,Sybase和HypersonicSQL中的标识列。 - > 性能方面,这是要走的路,就像没有Hibernate一样。数据库生成,几乎没有开销。
存在更多Hibernate特定的生成器,但它们不会在性能方面击败数据库生成的ID。 (请参阅链接文档中的5.1.2.2.1. Various additional generators
。)