0

我在 oracle 中有一个序列将用作 SYSID。该序列没有以有序的方式生成,这意味着它在某些地方跳过了数字,然后它正在继续。

下面是我的序列

CREATE SEQUENCE leaveform_seq 
MINVALUE 1 MAXVALUE 999999999999999999999999999 
INCREMENT BY 1 START WITH 1560
CACHE 20 ORDER NOCYCLE;

序列的任何替代方案?

4

3 回答 3

8

Oracle 序列是保证一系列唯一数字的生成器,这些数字在多用户环境中表现良好并可以扩展。性能和可扩展性的权衡是偶尔会在系列中存在差距。

很难找到这样的差距对组织真正重要的用例。尽管不幸的是,人们对他们陷入不必要的狂热是很常见的。


有序列的替代品吗?当然,我们总是可以自由地编写自己的代码。根据您的业务需求,它可能非常简单,也可能相当复杂。

要记住的重要事项是性能和可伸缩性。通过选择不使用序列,您不可避免地会牺牲两者。但是编写自己的系列生成器提供了一个真正搞砸的机会。

所以,了解其中的含义,并确保你的老板完全认同这个想法。

于 2013-06-18T10:57:41.243 回答
4

是的,这就是他们的工作方式。序列不能保证给出无间隙的数字列表,部分原因是使用序列值的事务的回滚不会将该值返回到可用列表,部分原因是序列缓存。

对于无意义的 id 来说,这应该不是问题。

这里有一个很长的讨论:http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID: 530735152441

于 2013-06-18T10:06:01.910 回答
0

如果你设置CACHE 1而不是CACHE 20 你会有更少的差距

于 2013-06-18T11:01:16.197 回答