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