Oracle 12c支持的ID生成策略



Oracle 12c支持哪些ID生成策略?

哪种ID生成策略最适合使用/性能最好

我在读关于身份证生成的帖子:http://sadalage.com/blog/2017/06/12/id-generation/

并想检查IDENTITY Id生成策略在往返数据库方面是否真的存在缺陷,或者优化器是否可以阻止这种情况?

数据库中没有由标识列引起的开销。我认为文章中的一些说法是有缺陷的。声明:

"标识ID生成不支持预分配,因此需要在每次插入后进行选择">

对于ORM来说可能是true,但对于数据库来说肯定不是true。大多数数据库都支持RETURNING子句,因此从标识列生成的值通常作为插入的一部分进行检索,即:

insert into MY_TABLE
values ( ... )
returning ID_COLUMN into :my_host_variable

因此,这听起来更像是他们选择了一个做得不够好的ORM。

类似地,语句

"在Oracle12c中,删除表不会删除与标识列关联的序列,从而在数据库中留下过时的序列">

被琐碎地证明是错误的:

SQL> create table t ( x int generated as identity );
Table created.
SQL> select sequence_name from user_sequences;
SEQUENCE_NAME
--------------------------------------------------------
ISEQ$$_159461
SQL> drop table t purge;
Table dropped.
SQL> select sequence_name from user_sequences;
no rows selected.

这也用来证明IDENTITY列(在Oracle中)无论如何都是作为序列实现的。所以

"如果数据库提供了使用序列的功能,就应该使用它们。在不提供序列的数据库中,必须使用标识列">

这是一个值得怀疑的说法。

相关内容

最新更新