Oracle 12c支持的ID生成策略

时间:2017-10-26 02:54:18

标签: sql oracle generator

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

哪种ID生成策略最佳使用/性能最佳?

我正在阅读有关ID生成的帖子:http://sadalage.com/blog/2017/06/12/id-generation/

并且想要检查IDENTITY Id生成策略是否属实,如所描述的那样在数据包往返方面确实存在缺陷,或者优化器可以阻止这种情况?

1 个答案:

答案 0 :(得分:1)

标识列导致数据库中没有开销。我认为文章中的一些主张是有缺陷的。声明:

“身份ID生成不支持预分配,因此每次插入后都需要选择”

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

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.

所以听起来更像是他们选择的ORM没有做好工作。

同样,声明

“在Oracle12c中删除表不会丢弃与标识列关联的序列,而是在数据库中保留过时的序列”

被简单地证明是错误的:

{{1}}

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

“如果数据库提供了使用序列的功能,则应使用它们。在不提供序列的数据库中,必须使用标识列”

是一个值得怀疑的说法。