Oracle 12c支持哪些ID生成策略?
哪种ID生成策略最佳使用/性能最佳?
我正在阅读有关ID生成的帖子:http://sadalage.com/blog/2017/06/12/id-generation/
并且想要检查IDENTITY Id生成策略是否属实,如所描述的那样在数据包往返方面确实存在缺陷,或者优化器可以阻止这种情况?
答案 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中)无论如何都是作为序列实现的。所以
“如果数据库提供了使用序列的功能,则应使用它们。在不提供序列的数据库中,必须使用标识列”
是一个值得怀疑的说法。