我在 oracle 中有一个序列将用作 SYSID。该序列没有以有序的方式生成,这意味着它在某些地方跳过了数字,然后它正在继续。
下面是我的序列
CREATE SEQUENCE leaveform_seq
MINVALUE 1 MAXVALUE 999999999999999999999999999
INCREMENT BY 1 START WITH 1560
CACHE 20 ORDER NOCYCLE;
序列的任何替代方案?
Oracle 序列是保证一系列唯一数字的生成器,这些数字在多用户环境中表现良好并可以扩展。性能和可扩展性的权衡是偶尔会在系列中存在差距。
很难找到这样的差距对组织真正重要的用例。尽管不幸的是,人们对他们陷入不必要的狂热是很常见的。
有序列的替代品吗?当然,我们总是可以自由地编写自己的代码。根据您的业务需求,它可能非常简单,也可能相当复杂。
要记住的重要事项是性能和可伸缩性。通过选择不使用序列,您不可避免地会牺牲两者。但是编写自己的系列生成器提供了一个真正搞砸的机会。
所以,了解其中的含义,并确保你的老板完全认同这个想法。
是的,这就是他们的工作方式。序列不能保证给出无间隙的数字列表,部分原因是使用序列值的事务的回滚不会将该值返回到可用列表,部分原因是序列缓存。
对于无意义的 id 来说,这应该不是问题。
这里有一个很长的讨论:http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID: 530735152441
如果你设置CACHE 1
而不是CACHE 20
你会有更少的差距